代码之家  ›  专栏  ›  技术社区  ›  Pavel_K

为什么JavaFX readonlyxproperty实现了observevalue接口

  •  1
  • Pavel_K  · 技术社区  · 7 年前

    我试图理解JavaFX属性API,并注意到ReadOnlyBooleanProperty、ReadOnlyStringProperty和其他readonlyxproperty类实现了observevalue接口。为什么我们需要更改只读属性的侦听器?或者我不明白。。。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Slaw    7 年前

    只读属性并不一定意味着该属性的值永远不会更改,它只是意味着它不能更改 改变。

    这方面的一个例子是 Worker 接口及其抽象实现,例如 Task . A 工人 具有各种只读属性,包括: title , message progress value 这些属性旨在传递有关 任务 的进度。考虑到这一点,允许从外部源修改这些属性是没有意义的。但它仍然必须提供一种从后台任务修改这些属性的方法。在 任务 ,这是通过受保护的 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只允许类本身更改属性。对于世界其他地方,该属性是完全只读的。

        2
  •  1
  •   n247s    7 年前

    这个 ReadOnlyProperty

    看看这个 ReadOnlyObjectWrapper 例如。它们通常私下用于值更改,而从 ReadOnlyPropertyWrapper#getReadOnlyProperty() 用于暴露 ObservableProperty 作为只读。

    推荐文章