监听计数器直到变量变化

时间:2017-10-11 22:12:54

标签: java listener

有没有办法构建监听器来检测日期是否仍然传输到变量,如果是,则执行一项操作,何时不执行其他操作?

例如

直到“int counter1”增加set boolean(true)或打印或更改另一个int for 1

int counter(不再增加或减少)set Boolean(false)打印不同的东西,将另一个int更改为2。

基本上变量正负变做一件事停止改变做其他事情再开始改变回去做第一件事等等。

有办法做到这一点吗? 没有明显的整体if语句的编译方式。

1 个答案:

答案 0 :(得分:0)

手工

最简单的方法是通过getter和setter访问该变量。您可以将优先逻辑放入您的setter中并跟踪那里的所有突变。

double

内置解决方案

还有很多其他方法可以实现相同的功能:使用getter和setter创建实际的java bean,自己实现observable and observer interfaces或使用现成的内置解决方案,例如public class Main { static int observable = 0; static void setObservable(int newValue) { if (observable != newValue) { System.out.printf("Observable int has been changed from %d to %d.%n", observable, newValue); observable = newValue; } } public static void main(String[] args) { observable = 1; // Nothing notified us that value has been changed setObservable(2); // Console output 'Observable int changed from 1 to 2.' } }

IntegerProperty

停止更改

至于"停止改变"听众,这是一个更复杂的问题。根据具体情况,我可以想到几种可能的解决方案:
1)如果您的循环是可预测的并且由您确定,则只需在需要时手动编写逻辑

    IntegerProperty intProperty = new SimpleIntegerProperty();
    intProperty.addListener((observable, oldValue, newValue) -> {

        if (!oldValue.equals(newValue) ) {
            System.out.printf("Value has been changed from %d to %d!%n", oldValue.intValue(), newValue.intValue());
        }
    });

    intProperty.setValue(1); // Output: Value has been changed from 0 to 1!
    intProperty.setValue(2); // Output: Value has been changed from 1 to 2!
    intProperty.setValue(2); // No output

    System.out.println(intProperty.intValue()); // Output: 2

2)如果您的循环不可预测但由您设计,您可以尝试使其更具可预测性,设计一套规则和协议,例如,如果新值正好为零,系统将暂停并切换到另一项任务
3)您还可以运行后台任务,该任务将定期检查上次更新的时间,以确定系统是否空闲

有许多可能的解决方案可供建议,但我无法在不了解更多细节的情况下提出更具体的解决方案