当我通过方法引用将更改侦听器添加到 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!");
}
}
我假设侦听器 lambda 解析为每个调用的不同值,替换为局部变量:
ChangeListener<? super Boolean> listener = App::test;
b.addListener(listener);
b.set(true);
b.removeListener(listener);
b.set(false);