首页
学习
活动
专区
工具
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值存储或返回默认值的功能。

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

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

相关·内容

没有搜到相关的沙龙

领券