gpt4 book ai didi

java - 开发人员应该在 JavaFX 中实现自己的 XXXProperties 吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:53 25 4
gpt4 key购买 nike

我正在阅读有关 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";
}
}
}

在极少数情况下,您希望提供自己的属性实现。例如。我写了一个 SimpleEventHandlerPropertyDrombler Commons .

我希望这些示例可以解决一些问题。

关于java - 开发人员应该在 JavaFX 中实现自己的 XXXProperties 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52898896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com