首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在JavaFX SimpleObjectProperty中禁止null (或返回默认值)

在JavaFX中,SimpleObjectProperty是一种可观察的属性,用于绑定和监听对象的变化。默认情况下,SimpleObjectProperty允许存储null值。然而,有时候我们希望禁止null值的存储,或者在属性为null时返回一个默认值。

要在SimpleObjectProperty中禁止null值的存储,可以使用JavaFX提供的NotNullProperty类。NotNullProperty是SimpleObjectProperty的子类,它重写了set方法,当传入的值为null时,会抛出NullPointerException异常,从而禁止了null值的存储。

以下是一个示例代码:

代码语言:txt
复制
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.adapter.JavaBeanObjectPropertyBuilder;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;

public class Main {
    public static void main(String[] args) {
        NotNullProperty<String> property = new NotNullProperty<>("Default Value");

        property.addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                System.out.println("Property changed: " + newValue);
            }
        });

        property.set("New Value"); // 正常设置新值
        property.set(null); // 抛出NullPointerException异常
    }

    public static class NotNullProperty<T> extends SimpleObjectProperty<T> {
        private T defaultValue;

        public NotNullProperty(T defaultValue) {
            this.defaultValue = defaultValue;
        }

        @Override
        public void set(T newValue) {
            if (newValue == null) {
                throw new NullPointerException("Null value is not allowed");
            }
            super.set(newValue);
        }

        @Override
        public T get() {
            T value = super.get();
            return value != null ? value : defaultValue;
        }
    }
}

在上面的示例中,我们创建了一个NotNullProperty类,它继承自SimpleObjectProperty,并重写了set方法和get方法。在set方法中,如果传入的值为null,会抛出NullPointerException异常,从而禁止了null值的存储。在get方法中,如果属性的值为null,会返回预设的默认值。

这样,我们就可以使用NotNullProperty来代替SimpleObjectProperty,实现禁止null值存储或返回默认值的功能。

推荐的腾讯云相关产品:无

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

动手实现扩展属性为对象动态添加获取数据

由于项目需要常常会遇到为某一个对象动态添加属性的情况,而以前我的实现方式是创建一个字典用于存放对象实例和它的值,但是往往光这么做是不够的,例如想在对象的某个属性值改变的时候做点什么都要写很多的代码,所以想是不是能够将这一类功能进行一下封装。后来因为学习WPF的缘故,想到依赖属性的思想和我需要的功能相近,但是又不能叫我把每一个想要添加扩展的对象类都去继承DependencyObject吧,而且有些类是封闭的不能够继承,所以依赖属性不能满足我的需求。不过说到底依赖属性还是个不错的东西,接下来我们将实现一个类似的东西 - 扩展属性。

03
领券