如何检查内部 class 中的值?

How to check value in inner class?

我想检查一个值是否保留其值并在更改时采取特定操作。我必须不断检查值是否已更改,所以我需要它是一个新的 Runnable 在单独的 Thread 上。(如果不是这种情况,请告诉我)但我无法检查对于子 class(inner class) 中的值,因为我需要将值声明为 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();

以上代码已清理,删除了不必要的内容。

最好使用项目数量有限的排队模型,比如 1024。这是因为值变化率可能与 yes() 方法的执行率不同。排队模型更简单,如果需要,将来可以 extended/tweaked 。

代码将如下所示,为了便于阅读,我省略了 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();

考虑使用 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 changed to 5