我正在阅读有关 javafx 属性的内容,但不明白为什么我们可以用来创建属性实例的非抽象类(例如 SimpleStringProperty
)在它们的代码中有 Simple
字样名字。据我所知,实现中的简单
意味着某些东西的基本
实现。
是否假设开发人员应该在 JavaFX 中实现必须扩展 XXXPropertyBase
的自己的 XXXProperty?
让我们以 SimpleStringProperty 为例。
java.lang.Object
javafx.beans.binding.StringExpression
javafx.beans.property.ReadOnlyStringProperty
javafx.beans.property.StringProperty
javafx.beans.property.StringPropertyBase
javafx.beans.property.SimpleStringProperty
我们是否应该开发自己的 OurStringProperty
来扩展 StringPropertyBase
?
同时在javadoc据说 javafx.beans.property.StringProperty 类提供了包装字符串值的属性的完整实现
。那么为什么我们需要这个SimpleStringProperty
呢?怎么解释呢?
最佳答案
下面是一个示例,说明如何使用 JavaFX 提供的实现将简单的基于对象的属性添加到您的类中(字符串和基本类型存在类似的类):
private final ObjectProperty<Foo> foo = new SimpleObjectProperty<>(this,
"foo", null);
public final Foo getFoo() {
return fooProperty().get();
}
public final void setFoo(Foo foo) {
fooProperty().set(foo);
}
public ObjectProperty<Foo> fooProperty() {
return foo;
}
下面是基于 JavaFX 提供的一些基类的只读属性实现示例:
public class MyClass {
private final ReadOnlyBarProperty bar = new ReadOnlyBarProperty();
public final Bar getBar() {
return barProperty().get();
}
private void setBar(Bar bar) {
this.bar.set(bar);
}
public ReadOnlyObjectProperty<Bar> barProperty() {
return bar;
}
[...]
private class ReadOnlyBarProperty extends ReadOnlyObjectPropertyBase<Bar> {
private Bar bar = null;
@Override
public final Bar get() {
return bar;
}
private void set(Bar newValue) {
if (!Objects.equals(bar, newValue)) {
bar = newValue;
fireValueChangedEvent();
}
}
@Override
public Object getBean() {
return MyClass.this;
}
@Override
public String getName() {
return "bar";
}
}
}
在极少数情况下,您希望提供自己的属性实现。例如。我写了一个 SimpleEventHandlerProperty在 Drombler Commons .
我希望这些示例可以解决一些问题。
关于java - 开发人员应该在 JavaFX 中实现自己的 XXXProperties 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52898896/