Логическое значение изменено, но не распознается оператором if - PullRequest
0 голосов
/ 20 октября 2019

У меня есть два класса, "class1" и "class2". Когда я инициализирую логическое значение «test» (true) в «class1» и спрашиваю его значение в операторе if в «class2», все работает нормально. Но как только я изменяю значение с «test1» на false в методе, он не распознает изменения в операторе if в «class2».

Моя цель состоит в том, чтобы булево значение изменилось, как толькокогда видео с наградами заканчивается и оператор if в class2 его распознает.

class1:

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
    }

class2:

Class1 class1 = new Class1();

if(class1.test1){
    // Do something
}else{
    // Do something else
}

Надеюсь, вы мне поможетеСпасибо.

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

если вы используете статическую переменную, ваша проблема будет решена. создайте класс следующим образом:

public class MyStatics {
public static boolean test1=true;

}

теперь измените класс 1 на:

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

и оставьте класс 2 таким, какой он есть.

примечание:

статическая переменная доступна везде, и вам не нужно определять их снова.

в чем ваша проблема?

class2игнорируется class1, потому что, когда вы используете «новый» class1, простыми словами, все настройки возвращаются к настройкам по умолчанию, а по умолчанию используется public boolean test1= true;

0 голосов
/ 20 октября 2019

Java - это так называемый объектно-ориентированный язык. Для всех «статических» членов, определенных в классе с именем, скажем, «Movie», существует один из них независимо от того, сколько объектов фильма создано. Но для обычных (нестатических) членов существует один на каждый созданный объект.

Итак, когда вы пишете Class1 class1 = new Class1();, вы создаете новый объект class1 и, таким образом, копию каждого нестатического члена внутри,Это означает, что в вашей среде выполнения есть как минимум 2 экземпляра объекта class1, и когда вы говорите test1 = false, вы обновляете поле test1, являющееся частью другого объекта, по сравнению с тем, которое читается другим классом.

Решение? Передать экземпляр class1 какому-либо методу (или конструктору) class2, или, возможно, использовать статическое поле или, возможно, другое решение;вы не вставили достаточно кода, чтобы сделать осмысленное предположение о том, какой здесь лучший подход.

...