gpt4 book ai didi

java - JavaFX 属性中 Value 和 ObjectValue 有什么区别?

转载 作者:行者123 更新时间:2023-12-02 01:51:45 26 4
gpt4 key购买 nike

我正在看这个图表:

enter image description here

仍然无法理解 Value 和 ObjectValue 之间的区别。例如,必须返回 WritableValue<String>#getValue()方法和WritableObjectValue<String>#get()方法?

最佳答案

JavaFX 的开发人员希望拥有基元兼容的可观察值。否则,JavaFX 中使用的每个数字都必须是包装类型(例如 Integer ),这会影响性能。然而,ObservableValue只能处理引用。为了解决这个问题,他们为常见的基元类型以及一些常见的引用类型创建了子接口(interface)(例如 String )。这些接口(interface)的形式为 ObservableXXXValue .

这些ObservableXXXValue接口(interface)定义了一个方法,名为get ,返回接口(interface)所针对的特定类型。例如,ObservableIntegerValueget方法返回 int 。如果您查看层次结构,您会看到:

  • Observable
    • ObservableValue<T>
      • ObservableObjectValue<T>
        • ObservableStringValue
        • ObservableListValue<E>
        • ObservableSetValue<E>
        • ObservableMapValue<K,V>
      • ObservableNumberValue
        • ObservableIntegerValue
        • ObservableLongValue
        • ObservableFloatValue
        • ObservableDoubleValue
      • ObservableBooleanValue

WritableValue界面遵循与 setValue 相同的模式和set 1

ObservableNumerValue接口(interface)扩展ObservableValue<Number>并提供一些Number类似的方法(例如 intValue )。那么它的每个子接口(interface)都提供get它们代表的原始类型的方法(例如 int )。 ObservableBooleanValueboolean 执行同样的操作.

Observable[List|Set|Map]Value接口(interface)有些特殊。例如,ObservabeListValue扩展两者 ObservableObjectValue<ObservableList<E>>ObservableList<E> 。这允许实现同时表现得像可观察值和可观察列表。这些接口(interface)直到稍后(JavaFX 2.1)才添加。

ObservableObjectValueObservableStringValue我假设2存在接口(interface),以提供对称性——无论是原则上还是镜像 WritableValue接口(interface)。

所以,直接回答你的问题,get 之间没有区别。和getValue当谈到ObservableObjectValue时。 get 之间区别和getValue当涉及像 ObservableIntegerValue 这样的接口(interface)时哪里get返回 intgetValue返回 Number 。因此,实现直接处理基本类型的访问和存储。

<小时/>

1。 WritableValue还提供getValue及其子接口(interface)提供适当的get方法。但是,它是不可观察的(不扩展 ObservableObservableValue )。
2. @fabian 在评论中证实了这一假设。

<小时/>

在处理实现时,这会变得更加有趣。我不会讲太多细节,但会给出一个层次结构示例。

  • ObservableStringValue ^
    • StringExpression
      • StringBinding 实现 Binding<String>
      • ReadOnlyStringProperty 实现 ReadOnlyProperty<String>
        • ReadOnlyStringPropertyBase
        • StringProperty 实现 Property<String>WritableStringValue
          • StringPropertyBase
            • SimpleStringProperty *
              • ReadOnlyStringWrapper *

^ 一个接口(interface)。
* 一个具体的类。
没有标记表示抽象类。

并注意:

  • ReadOnlyProperty延伸ObservableValue
  • Binding延伸ObservableValue
  • Property延伸ReadOnlyPropertyWritableValue

关于java - JavaFX 属性中 Value 和 ObjectValue 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52897071/

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