Как получить доступ к логическому значению из другого класса в конструкторе объекта?

Итак, у меня есть основной класс, и в этом классе у меня есть логическое значение с именем test. Я хочу иметь возможность включать или выключать его через определенное время, поэтому у меня есть класс с именем BooleanFlipCounter. Ниже

public class BooleanFlipCounter implements Runnable {
    int seconds;
    boolean booleanToFlip;
    boolean setOnOrOff;

    // Seconds is seconds before flip.
    // booleanToFlip is where you define where you use it which boolean to use.
    // setOnOrOff is true or false, whether it flips it to on or off after a
    // certain time.

    public BooleanFlipCounter(int secondss, boolean booleanToFlips, 
                              boolean setOnOrOffs) {
        seconds = secondss;
        booleanToFlip = booleanToFlips;
        setOnOrOff = setOnOrOffs;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        while (seconds <= 0) {

            System.out.println("1: " + booleanToFlip + " : " + setOnOrOff);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            seconds--;
            System.out.println("Minused");

        }

        if (setOnOrOff == true) {
            Main.test = true;
            System.out.println("2: " + booleanToFlip + " : " + setOnOrOff);
        } else if (setOnOrOff == false) {
            Main.test = false;
            System.out.println("3: " + booleanToFlip + " : " + setOnOrOff);
        }

    }

}

Я хочу иметь доступ к "тесту" при создании нового BooleanFlipCounter. Как мне получить доступ к нему как к логическому объекту, а не как к фактическому логическому объекту? Если это имеет смысл.

1 ответ

boolean переменная не является объектом, и вы не можете получить к нему доступ "как" к объекту. Если вы хотите ссылку на boolean переменная, вам нужно использовать ссылку на объект, который ее содержит.

Вы можете определить интерфейс:

public interface Testable {
    boolean isTest();
    void setTest(boolean test);
}

Тогда вы можете сделать свой Main реализовать класс Testable с точки зрения его внутреннего test флаг и сделать BooleanFlipCounter взять ссылку на Testable объект, которым он должен манипулировать.

(Обратите внимание, что для этого необходимо создать экземпляр вашего Main класс, или, по крайней мере, что-то, что реализует Testable интерфейс. Если Main.test Флаг в настоящее время является статической переменной, рассмотрите возможность сделать его нестатичным. Вы можете иметь свой статический main метод просто создать new Main() и вызвать метод для выполнения реальной работы.)

Другие вопросы по тегам