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

iaut 发布于 2018-12-06 boolean 最后更新 2018-12-06 22:59 4 浏览

我完全忽略了我认为简单的Java语法。 这是我第一堂课的例子:

public ExampleClass {
    public boolean exampleBool = false;
if(SomethingImportantHappensOnRuntime) {
        exampleBool = true;
    }
}  
这是第二堂课:
public ExampleClass2 {
    if(exampleBool) {
        //do stuff
    }
}
如何将ExampleBlass中的exampleBool传递给ExampleClass2,以便在运行时发生重要事件时,将exampleBool设置为true,并且“ExampleClass2”中的“if”将运行?
已邀请:

oad

赞同来自:

我想感谢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);
                }
}
            });
希望你们发现它很有用

gvel

赞同来自:

最简单的方法是:

public ExampleClass {
    public static boolean exampleBool = false;
public static boolean returnExampleBool () {
        return exampleBool;
    }
if(SomethingImportantHappensOnRuntime) {
        exampleBool = true;
    }
}
public ExampleClass2 {
    if(ExampleClass.ReturnExampleBool()) {
        //do stuff
    }
}

nqui

赞同来自:

从问题中不清楚你是否只想从另一个类中读取一个成员变量,或者你是否希望第二个类在第一个类中设置标志时作出反应。 对于你只需要访问,成员变量,使成员变量私有,否则它可以被任何东西修改,然后提供一个访问器来读取它的值:

public ExampleClass {
    private boolean exampleBool = false;
public boolean getExampleBool() {
        return exampleBool;
    }
void someMethodOrOther() {
        if(somethingImportantHappensOnRuntime()) {
            exampleBool = true;
        }
    }
}   
如果您希望ExampleBlass2在exampleBool更改时做出反应,那么它会更复杂。这是一种名为observer pattern的设计模式,它是这种情况的goto解决方案。 这涉及在两个类之间添加接口,这允许第二类在没有第一类具有第二类的特定知识的情况下收听第一类。
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时,它会检查标志并执行它需要的操作。

ysequi

赞同来自:

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

要回复问题请先登录注册