我试图了解 JavaFX 属性 API,并注意到 ReadOnlyBooleanProperty、ReadOnlyStringProperty 和其他 ReadOnlyXPropety 类实现了 ObservableValue 接口(interface)。为什么我们需要更改只读属性的监听器?或者我不明白什么...
最佳答案
只读属性并不一定意味着该属性的值永远不会改变,它只是意味着它不能外部改变。
这方面的一个例子是 Worker
接口(interface)及其抽象实现,例如Task
. Worker
具有各种只读属性,包括:title
、message
、progress
、value
等。这些属性旨在向 UI 传达有关 Task
进度的信息。考虑到这一点,允许从外部源修改这些属性是没有意义的。但它仍然必须提供一种从后台任务修改这些属性的方法。在 Task
中,这是通过 protected updateMessage
、updateProgress
和其他方法完成的。
在内部,这是通过使用 ReadOnlyXXXWrapper
类来完成的。这些实现扩展了它们相应的 SimpleXXXProperty
类,但公开了一个真正只读的专用 ReadOnlyXXXProperty
。 “真的”,我的意思是它没有实现 WritableValue
.这看起来像:
public class SomeClass {
private final ReadOnlyStringWrapper message = new ReadOnlyStringWrapper(this, "message");
private void setMessage(String message) {
this.message.set(message);
}
public final String getMessage() {
return message.get();
}
public final ReadOnlyStringProperty messageProperty() {
return message.getReadOnlyProperty();
}
}
请注意,setter 只允许类本身更改属性。对于世界其他地方,该属性是完全只读的。
关于java - 为什么在 JavaFX ReadOnlyXPropety 中实现 ObservableValue 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52893276/