如何检查内部类的值?

时间:2018-05-31 05:45:32

标签: java runnable final

我想检查一个值是否保留其值并对onChange采取特定操作。我必须经常检查值是否已更改,因此我需要将其作为单独的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 :(得分:2)

最好使用具有有限数量项目的排队模型,例如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();

答案 1 :(得分:0)

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