java - 向 Java BooleanProperty 类添加自定义方法

标签 java javafx

我喜欢使用属性类,但我不喜欢用多长的句子来做简单的事情。

我想扩展 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()方法需要一个包装的 boolean 对象。在幕后,它使用 get()解开该值。所以当你使用setValue(true)时,您的原语将被自动装箱到值为 true 的 boolean 对象中。然后,SimpleBooleanProperty使用.get()将对象展开为原语。您有get()重写为始终返回 false。

如果您单步执行程序,您会在 setValue(true) 时看到这一点。执行后,实际设置的值为false因为这个。

关于java - 向 Java BooleanProperty 类添加自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60807936/

相关文章:

java - 在 TreeTable 的同一列中添加许多对象类型

java - 状态更改时删除 TableView 条目

JavaFX SplitMenuButton 设置箭头的位置

java - 在 JavaFx 中处理和扩展 Node 的正确方法

java - 在 TestNG 上检索测试名称

java - 使用 Hibernate Validator 在错误消息中包含字段值

java - 我怎样才能正确地做到这一点,以便能够在 DBSelectQuery 类中进行选择?

java - Java中检测按键是否被按下

java - 实例化多个场景会导致 "java.lang.NullPointerException"

java - 使用 java 运行深度链接来打开应用程序