JavaFX属性中Value和ObjectValue的区别是什么?

JavaFX属性中Value和ObjectValue的区别是什么?,java,javafx,Java,Javafx,我正在看这个图表: 仍然无法理解Value和ObjectValue之间的区别。例如,什么必须返回writeablevalue#getValue()method和writeableobjectvalue#get()method?JavaFX的开发人员希望具有与原语兼容的可观察值。否则,JavaFX中使用的每个数字都必须是包装器类型(例如,Integer),这会影响性能。但是,observeValue只能处理引用。为了解决这个问题,他们为常见的基本类型以及一些常见的引用类型(例如String)创建

我正在看这个图表:


仍然无法理解Value和ObjectValue之间的区别。例如,什么必须返回
writeablevalue#getValue()
method和
writeableobjectvalue#get()
method?

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

这些
observexvalue
接口定义了一个名为
get
的方法,该方法返回接口的特定类型。例如,
observeIntegerValue
get
方法返回
int
。如果查看层次结构,您将看到:

  • 可观察的
    • observeValue
      • observeObjectValue
        • observestringvalue
        • observeListValue
        • observeSetValue
        • observedmapvalue
      • observeNumberValue
        • observeIntegerValue
        • ObservableLongValue
        • observeflotvalue
        • 可观察到的超高值
      • observeboleanvalue
writeablevalue
接口遵循与
setValue
set
1相同的模式

observeNumberValue
接口扩展了
observeValue
,并提供了一些类似
Number
的方法(例如
intValue
)。然后,它的每个子接口为它们所表示的基本类型(例如,
int
)提供
get
方法。
ObservableBooleanValue
布尔值执行相同的操作

可观察的[List | Set | Map]值
接口有些特殊。例如,
observablestvalue
扩展了
ObservableObjectValue
ObservableList
。这允许实现同时表现为可观察值和可观察列表。这些接口直到稍后才添加(JavaFX2.1)

我认为,
observateObjectValue
observateStringValue
接口存在,以提供原则上的对称性,并反映
writeableValue
接口

因此,为了直接回答您的问题,
get
getValue
observeObjectValue
方面没有区别。对于
observeIntegerValue
等接口,
get
getValue
之间存在差异,其中
get
返回一个
int
,而
getValue
返回一个
数字。因此,实现直接处理访问和存储的基元类型


一,
writeablevalue
还提供了
getValue
,其子接口提供了相应的
get
方法。但是,它不可观察(不扩展
可观察
可观察值
)。
2.由@fabian在评论中确认的假设


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

  • observestringvalue
    ^
    • StringExpression
      • StringBinding
        实现
        Binding
      • ReadOnlyStringProperty
        实现
        ReadOnlyProperty
        • ReadOnlyStringPropertyBase
        • StringProperty
          实现
          Property
          WritableStringValue
          • StringPropertyBase
            • SimpleStringProperty
              *
              • ReadOnlyStringWrapper
                *
^接口。
*具体的类别。
无标记表示抽象类

并注意到:

  • ReadOnlyProperty
    extends
    observeValue
  • 绑定
    扩展
    可观察值
  • 属性
    扩展了
    只读属性
    可写值

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

这些
observexvalue
接口定义了一个名为
get
的方法,该方法返回接口的特定类型。例如,
observeIntegerValue
get
方法返回
int
。如果查看层次结构,您将看到:

  • 可观察的
    • observeValue
      • observeObjectValue
        • observestringvalue
        • observeListValue
        • observeSetValue
        • observedmapvalue
      • observeNumberValue
        • observeIntegerValue
        • ObservableLongValue