簡體   English   中英

JavaFX:綁定和弱監聽器

[英]JavaFX: Binding and weak listener

Javadoc中獲取bind()

請注意,JavaFX具有通過弱偵聽器實現的所有綁定調用。 這意味着可以對垃圾屬性進行垃圾收集,並阻止其更新。

現在考慮擁有兩個屬性, ObjectProperty<Foo> shortLived位於ShortLivedObject ObjectProperty<Foo> longLived和位於ShortLivedObject ObjectProperty<Foo> longLived LongLivedObject

我這樣綁定它們:

longLivedObject.longLivedProperty().bind(shortLivedObject.shortLivedProperty());

因為綁定使用弱監聽器,所以如果將shortLivedObject進行垃圾回收, shortLived屬性進行垃圾回收。 那么,這是否意味着longLived屬性仍然被綁定,但是它永遠不會被更新? 這是否會使longLived屬性處於綁定狀態(使進一步的綁定成為不可能),但是什么也不做呢?

那么,這是否意味着longLived屬性仍然被綁定,但是它永遠不會被更新?

假設shortLivedProperty已被垃圾回收, shortLivedProperty將永遠不會再次失效。 結果,將不再調用longLived的偵聽器並對其進行更新。

這是否會使longLived屬性處於綁定狀態(使進一步的綁定成為不可能),但是什么也不做呢?

無論綁定狀態如何,您都應該始終能夠bind屬性bind新的可觀察對象,因為舊的可觀察屬性將為您刪除/取消綁定:

public void bind(final ObservableValue<? extends T> newObservable) {
    if (newObservable == null) {
        throw new NullPointerException("Cannot bind to null");
    }

    if (!newObservable.equals(this.observable)) {
        unbind();
        observable = newObservable;
        if (listener == null) {
            listener = new Listener(this);
        }
        observable.addListener(listener);
        markInvalid();
    }
}

暫無
暫無

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

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