[英]What is the difference between Value and ObjectValue in JavaFX properties?
JavaFX的開發人員希望具有與原語兼容的可觀察值。 否則,JavaFX中使用的每個數字都必須是會影響性能的包裝器類型(例如Integer
)。 但是, ObservableValue
只能處理引用。 為了解決這個問題,他們為常見的基本類型以及一些常見的引用類型(例如String
)創建了子接口。 這些接口采用ObservableXXXValue
的形式。
這些ObservableXXXValue
接口定義了一個名為get
的方法,該方法返回接口所針對的特定類型。 例如, ObservableIntegerValue
的get
方法返回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
接口擴展了ObservableValue<Number>
並提供了一些intValue
Number
的方法(例如intValue
)。 然后,它的每個子接口為它們表示的原始類型(例如int
)提供get
方法。 ObservableBooleanValue
對boolean
做同樣的boolean
。
Observable[List|Set|Map]Value
接口有些特殊。 例如, ObservabeListValue
擴展了 ObservableObjectValue<ObservableList<E>>
和ObservableList<E>
。 這允許實現同時表現為可觀察的值和可觀察的列表。 這些接口直到稍后才添加(JavaFX 2.1)。
我假設2 ,存在ObservableObjectValue
和ObservableStringValue
接口,以提供對稱性-既在原理上又對WritableValue
接口進行鏡像。
因此,直接回答您的問題,涉及ObservableObjectValue
時, get
和getValue
之間沒有區別。 有之間的差異get
和getValue
當談到喜歡接口ObservableIntegerValue
那里get
返回的int
和getValue
返回一個Number
。 因此,實現直接針對訪問和存儲處理原始類型。
1. WritableValue
還提供getValue
及其子接口提供適當的get
方法。 但是,它不是可觀察的(不會擴展Observable
或ObservableValue
)。
2. @fabian在評論中確認了假設。
在處理實現時,這變得更加有趣。 我不會贅述過多,但將給出一個示例層次結構。
ObservableStringValue
^
StringExpression
StringBinding
實現Binding<String>
ReadOnlyStringProperty
實現ReadOnlyProperty<String>
ReadOnlyStringPropertyBase
StringProperty
實現Property<String>
和WritableStringValue
StringPropertyBase
SimpleStringProperty
*
ReadOnlyStringWrapper
* ^接口。
*具體課程。
沒有標記意味着抽象類。
並注意:
ReadOnlyProperty
擴展了ObservableValue
Binding
擴展了ObservableValue
Property
擴展了ReadOnlyProperty
和WritableValue
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.