参考方法更改监听器未删除

问题描述 投票:0回答:1

当我通过方法引用将更改侦听器添加到 JavaFx 对象属性,然后尝试删除相同的更改侦听器时,它似乎仍然被注册为侦听器。这是预期行为还是错误?

在下面的示例中,Hello World!打印了两次,我希望它只会打印一次。

public class App {

public static void main(String[] args) {
    BooleanProperty b = new SimpleBooleanProperty(false);
    b.addListener(App::test);
    b.set(true);
    b.removeListener(App::test);
    b.set(false);
}

static void test(Object b, Object o, Object n) {
    System.out.println("Hello World!");
}
}
java javafx changelistener
1个回答
0
投票

我假设侦听器 lambda 解析为每个调用的不同值,替换为局部变量:

ChangeListener<? super Boolean> listener = App::test;
b.addListener(listener);
b.set(true);
b.removeListener(listener);
b.set(false);
© www.soinside.com 2019 - 2024. All rights reserved.