java - 向 Java BooleanProperty 类添加自定义方法
问题描述
我喜欢使用 Property 类,但我不喜欢做简单的事情需要多长的句子。
我想扩展 SimpleBooleanProperty 类,而不是需要做这样的事情:
myProperty.setValue(!myProperty.getValue());
我可以这样做:
myProperty.flip();
所以,我尝试扩展 SimpleBooleanClass,但它不起作用。
这是我在下面发布的相关结果的尝试:
import javafx.beans.InvalidationListener;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
public class CBP extends SimpleBooleanProperty {
@Override public void bind(ObservableValue<? extends Boolean> observable) {}
@Override public void unbind() {}
@Override public boolean isBound() {return false;}
@Override public Object getBean() {return null;}
@Override public String getName() {return null;}
@Override public boolean get() {return false;}
@Override public void set(boolean value) {}
@Override public void addListener(ChangeListener<? super Boolean> listener) {}
@Override public void removeListener(ChangeListener<? super Boolean> listener) {}
@Override public void addListener(InvalidationListener listener) {}
@Override public void removeListener(InvalidationListener listener) {}
public void flip(){
super.setValue(!super.getValue());
}
}
使用它的这种尝试产生了如下所示的输出:
CBP cbp = new CBP();
cbp.setValue(true);
if (cbp.getValue().equals(true)) System.out.println("TRUE"); else System.out.println("FALSE");
cbp.flip();
if (cbp.getValue().equals(true)) System.out.println("TRUE"); else System.out.println("FALSE");
这是输出:
FALSE
FALSE
我究竟做错了什么?
解决方案
该setValue()
方法需要一个包装的布尔对象。在引擎盖下,它用于get()
展开值。因此,当您使用 时setValue(true)
,您的原语将被自动装箱为具有 value 的 Boolean 对象true
。然后,SimpleBooleanProperty
用于.get()
将对象解包为基元。您已get()
被覆盖以始终返回 false。
如果你单步执行你的程序,你会看到当setValue(true)
被执行时,值实际上是false
因为这个而设置的。
推荐阅读
- docker - 无法解析主机:gogs-repo
- reactjs - React:对useEffect的条件依赖?或者如何防止冗余?
- python - 如何从 .open() 列表中删除换行符
- asp.net-core - 使用 Blazor 应用程序打开新的浏览器窗口
- php - 如何在数据表服务器端处理中解码 html 格式的数据
- x86 - 为什么我不应该捕获未定义指令异常而不是使用 CPUID?
- reactjs - TypeError:无法读取未定义的属性“位置”-connected-react-router-ReactRouter v5
- neo4j - 如何增加neo4j中的堆大小
- python - numpy.extract() 结果与预期不同
- android - TextView - 递减数字的动画