我有两个类,“ 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
}
希望您能帮助我,谢谢。
答案 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的某个方法(或构造函数),或者使用静态字段或其他解决方案;您没有粘贴足够的代码来对这里的最佳方法做出有意义的猜测。