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
extendsobserveValue
绑定
扩展可观察值
属性
扩展了只读属性
和可写值
JavaFX的开发人员希望拥有与原语兼容的可观察值。否则,JavaFX中使用的每个数字都必须是包装器类型(例如,Integer
),这会影响性能。但是,observeValue
只能处理引用。为了解决这个问题,他们为常见的基本类型以及一些常见的引用类型(例如String
)创建了子接口。这些接口的形式为ObservableXXXValue
这些observexvalue
接口定义了一个名为get
的方法,该方法返回接口的特定类型。例如,observeIntegerValue
的get
方法返回int
。如果查看层次结构,您将看到:
可观察的
observeValue
observeObjectValue
observestringvalue
observeListValue
observeSetValue
observedmapvalue
observeNumberValue
observeIntegerValue
ObservableLongValue