Как проверить значение во внутреннем классе? - PullRequest
0 голосов
/ 31 мая 2018

Я хочу проверить, сохраняет ли значение свое значение, и предпринять определенное действие вChange.Я должен постоянно проверять, изменилось ли значение, поэтому мне нужно, чтобы оно было новым Runnable на отдельном Thread. (Если это не так, пожалуйста, дайте мне знать) Но я не могу проверить значение внутриподкласс (внутренний класс), потому что мне нужно будет объявить значение как final. Но все дело в том, чтобы не позволить переменной быть final.Тип данных int

while (true) {

                    //check whether value has changed
                }

Использование

new Thread(new Runnable() {
            @Override
            public void run() {
                if(valueHasChanged()){//valueHasChanged will require the variable to be final
                    yes();
            }
        }).start();

Приведенный выше код был очищен для удаления ненужных вещей.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Рассмотрите возможность использования javafx.beans.property.SimpleIntegerProperty.Запустите этот простой тест, чтобы увидеть, как:

public static void main(String[] args) {

    SimpleIntegerProperty monitorValue = new SimpleIntegerProperty();
    monitorValue.set(4);
    monitorValue.addListener((obs, oldValue, newValue ) ->{
        System.out.println(oldValue+ " changed to "+ newValue);
    });
    monitorValue.set(5);
}

Выход

4 изменен на 5

0 голосов
/ 31 мая 2018

Лучше использовать модель массового обслуживания с ограниченным количеством элементов, скажем, 1024. Это связано с тем, что скорость изменения значения может отличаться от скорости выполнения метода yes().Модель массового обслуживания проще и может быть расширена / изменена в будущем, если потребуется.

Код будет выглядеть следующим образом, я пропустил блок InterruptedException catch для удобства чтения:

private final BlockingQueue<Boolean> queue = new LinkedBlockingQueue<>(1024);

while (true) {
    .....
    //check whether value has changed and do
    queue.put(true);
    .....
}

....
....

new Thread(new Runnable() {
    @Override
    public void run() {
        while(queue.take()){
           yes();
        }
    }
}).start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...