如何检查内部 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
我想检查一个值是否保留其值并在更改时采取特定操作。我必须不断检查值是否已更改,所以我需要它是一个新的 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