布尔值已更改,但if语句无法识别

时间:2019-10-19 22:56:09

标签: java android class if-statement boolean

我有两个类,“ class1”和“ class2”。 当我在“ class1”中初始化一个名为“ test”(true)的布尔值并在“ class2”的if-语句中要求它的值时,一切正常。 但是,一旦在方法中将值从“ test1”更改为false,它就无法识别“ class2”中if语句的更改。

我的目标是,奖励视频一结束,布尔值就会改变,并且class2中的if语句可以识别它。

class1:

import { fb } from './firebase'

class2:

public boolean test1= true; //This is recognized by the if-statement in class2

    ...

    @Override
    public void onRewardedVideoAdRewarded(Placement placement) {
        test1 = false; //this is getting ignored by the if-statement in class2
    }

希望您能帮助我,谢谢。

2 个答案:

答案 0 :(得分:2)

如果使用静态变量,则将解决您的问题。 制作这样的课程:

public class MyStatics {
public static boolean test1=true;

}

现在将第1类更改为:

 @Override
public void onRewardedVideoAdRewarded(Placement placement) {
    test1 = false; 
}

并保持第2类不变。

  

注意:

静态变量可以在任何地方访问,您无需再次定义它们。

  

你怎么了?

class2忽略了class1,因为使用“ new” class1时,简而言之,就像所有设置都恢复为default,而默认值为public boolean test1= true;

答案 1 :(得分:0)

Java是一种所谓的面向对象的语言。对于在名为“电影”的类中定义的所有“静态”成员,无论创建了多少个电影对象,都存在一个成员。但是对于普通(非静态)成员,每个创建的对象只有一个。

因此,当您编写Class1 class1 = new Class1();时,您将创建一个新的class1对象,并因此生成其中的每个非静态成员的副本。这意味着您的运行时中至少有2个class1对象的实例,并且当您说test1 = false时,您正在更新test1字段,该字段属于另一个对象,而另一个对象正在读取另一个对象。

解决方案?将class1的实例传递给class2的某个方法(或构造函数),或者使用静态字段或其他解决方案;您没有粘贴足够的代码来对这里的最佳方法做出有意义的猜测。