在JavaFX中,SimpleObjectProperty是一种可观察的属性,用于绑定和监听对象的变化。默认情况下,SimpleObjectProperty允许存储null值。然而,有时候我们希望禁止null值的存储,或者在属性为null时返回一个默认值。
要在SimpleObjectProperty中禁止null值的存储,可以使用JavaFX提供的NotNullProperty类。NotNullProperty是SimpleObjectProperty的子类,它重写了set方法,当传入的值为null时,会抛出NullPointerException异常,从而禁止了null值的存储。
以下是一个示例代码:
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值存储或返回默认值的功能。
推荐的腾讯云相关产品:无
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云