簡體   English   中英

JavaFX屬性中的Value和ObjectValue有什么區別?

[英]What is the difference between Value and ObjectValue in JavaFX properties?

我在看這張圖:

在此處輸入圖片說明

仍然無法理解Value和ObjectValue之間的區別。 例如,什么必須返回WritableValue<String>#getValue()方法和WritableObjectValue<String>#get()方法?

JavaFX的開發人員希望具有與原語兼容的可觀察值。 否則,JavaFX中使用的每個數字都必須是會影響性能的包裝器類型(例如Integer )。 但是, ObservableValue只能處理引用。 為了解決這個問題,他們為常見的基本類型以及一些常見的引用類型(例如String )創建了子接口。 這些接口采用ObservableXXXValue的形式。

這些ObservableXXXValue接口定義了一個名為get的方法,該方法返回接口所針對的特定類型。 例如, ObservableIntegerValueget方法返回int 如果查看層次結構,將會看到:

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

WritableValue接口使用setValueset 1遵循相同的模式。

ObservableNumerValue接口擴展了ObservableValue<Number>並提供了一些intValue Number的方法(例如intValue )。 然后,它的每個子接口為它們表示的原始類型(例如int )提供get方法。 ObservableBooleanValueboolean做同樣的boolean

Observable[List|Set|Map]Value接口有些特殊。 例如, ObservabeListValue擴展 ObservableObjectValue<ObservableList<E>>ObservableList<E> 這允許實現同時表現為可觀察的值和可觀察的列表。 這些接口直到稍后才添加(JavaFX 2.1)。

我假設2 ,存在ObservableObjectValueObservableStringValue接口,以提供對稱性-既在原理上又對WritableValue接口進行鏡像。

因此,直接回答您的問題,涉及ObservableObjectValue時, getgetValue之間沒有區別。 之間的差異getgetValue當談到喜歡接口ObservableIntegerValue那里get返回的intgetValue返回一個Number 因此,實現直接針對訪問和存儲處理原始類型。


1. WritableValue還提供getValue及其子接口提供適當的get方法。 但是,它不是可觀察的(不會擴展ObservableObservableValue )。
2. @fabian在評論中確認了假設。


在處理實現時,這變得更加有趣。 我不會贅述過多,但將給出一個示例層次結構。

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

^接口。
*具體課程。
沒有標記意味着抽象類。

並注意:

  • ReadOnlyProperty擴展了ObservableValue
  • Binding擴展了ObservableValue
  • Property擴展了ReadOnlyPropertyWritableValue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM