如何在类之间传递布尔值?

时间:2011-10-14 04:32:16

标签: java variables boolean

我完全忽略了我认为简单的Java语法。

以下是我的第一堂课的例子:

public ExampleClass {
    public boolean exampleBool = false;

    if(SomethingImportantHappensOnRuntime) {
        exampleBool = true;
    }
}  

这是第二堂课:

public ExampleClass2 {
    if(exampleBool) {
        //do stuff
    }
}

如何将ExampleBool从ExampleClass传递给ExampleClass2 ,以便在运行时重要事件发生时,exampleBool将设置为true并且“ExampleClass2”中的“if”将会运行?

4 个答案:

答案 0 :(得分:6)

最简单的方法是:

public ExampleClass {
    public static boolean exampleBool = false;

    public static boolean returnExampleBool () {
        return exampleBool;
    }

    if(SomethingImportantHappensOnRuntime) {
        exampleBool = true;
    }
}

public ExampleClass2 {
    if(ExampleClass.ReturnExampleBool()) {
        //do stuff
    }
}

答案 1 :(得分:1)

从问题中不清楚你是否只想从另一个类中读取一个成员变量,或者你是否希望第二个类在第一个类中设置标志时作出反应。

对于你只需要访问,成员变量,使成员变量私有,否则它可以被任何东西修改,然后提供一个访问器来读取它的值:

public ExampleClass {
    private boolean exampleBool = false;

    public boolean getExampleBool() {
        return exampleBool;
    }

    void someMethodOrOther() {
        if(somethingImportantHappensOnRuntime()) {
            exampleBool = true;
        }
    }
}   

如果您希望ExampleBlass2在exampleBool更改时做出反应,那么它会更复杂。这是一种名为observer pattern的设计模式,它是这种情况的转换解决方案。

这涉及在两个类之间添加一个接口,允许第二个类听第一个类,而不是第一个类具有第二个类的特定知识。

interface ExampleClassObserver {
    public void exampleClassChanged(ExampleClass exampleClass);
}

public final class ExampleClass {
    private final List<ExampleClassObserver> observers = new ArrayList<ExampleClassObserver>();
    private boolean exampleBool = false;

    public boolean getExampleBool() {
        return exampleBool;
    }

    public final void addObserver(ExampleClassObserver observer) {
        observers.add(observer);
    }

    public final void removeObserver(ExampleClassObserver observer) {
        observers.remove(observer);
    }

    void someMethodOrOther() {
        if(somethingImportantHappensOnRuntime()) {
            exampleBool = true;
            notifyObservers();
        }
    }

    private void notifyObservers() {
        for (ExampleClassObserver observer : observers) {
            observer.exampleClassChanged(this);
        }
    }

}

public final class ExampleClass2 implements ExampleClassObserver {
    public ExampleClass2(ExampleClass exampleClass) {
        // we need to start observing the class so we're notified when the change happens
        exampleClass.addObserver(this);
    }
    public void exampleClassChanged(ExampleClass exampleClass) {
        if (exampleClass.getExampleBool()) {
            // do something
        }
    }
}

所以这里发生的事情是,当设置布尔标志时,任何观察者都会收到有关更改的通知,当通知ExampleClass2时,它会检查标志并执行它所需的操作。

答案 2 :(得分:0)

我会在ExampleClass中有一个ExampleClass2的实例。 ExampleClass2应该有一个像setBoolean(boolean b)这样的方法来更新对象中的字段。当偶数发生时,您可以在ExampleClass2中调用此setter方法。

答案 3 :(得分:0)

我想感谢Raza的简单回答并与我分享,是一个带有监听器(SetOnItemSelectedListener)的Spinner的改编版。在保存之前,或者如果微调器处于正确的位置等,这可以用于验证使用微调器完成的某些操作,等等:

首先,设置两个基础类,Raza很高兴为我们提供:

public static boolean myBoolean = false;
    public static boolean ClassForRetruningBoolean() {
        return myBoolean;
    }

其次,我必须设置微调器侦听器:

spinner.setOnItemSelectedListener(
                new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                        if (position == 0) {

                            myBoolean = false;

                        }

                        else if (position != 0) {

                            myBoolean = true;

                        }
                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {
                        //Semicolons and parenthesis make crying faces
                    }
                }
        );

第三,你必须为你的其他课程提供该课程。我用AndroidAnnotations做这件事。此外,我在活动文件中。

@Bean
    TheClassWhereTheBooleanIs getingTheClassForTheBoolean;

之后,为Button设置onClickListener,并检索写入布尔值的类:

    myButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                /*Validation for empty CNC text area*/
                else if (getingTheClassForTheBoolean.ClassForRetruningBoolean() == true /*you could also add another condition here && etc*/) {
                    Toast toast = Toast.makeText(getApplicationContext(), "Boolean is True therefore no saving", Toast.LENGTH_LONG);
                    toast.show();
                }

                /*Every validation has being pass now you can move on*/
                else {

//So if the validation pass you can do the intent, the boolean is false

                    Intent i = new Intent(getApplicationContext(), OtherActivity.class);
                    startActivity(i);
                }


                }
            });

希望你们发现它很有用

相关问题