[英]JavaFX: Binding and weak listener
請注意,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.