Интерфейс ObservableValue<T>
- Параметры типа:
-
T- Тип оборачиваемого значения.
- Все суперинтерфейсы:
Observable
- Все известные подинтерфейсы:
-
Binding<T>,JavaBeanProperty<T>,NumberBinding,NumberExpression,ObservableBooleanValue,ObservableDoubleValue,ObservableFloatValue,ObservableIntegerValue,ObservableListValue<E>,ObservableLongValue,ObservableMapValue<K,,V> ObservableNumberValue,ObservableObjectValue<T>,ObservableSetValue<E>,ObservableStringValue,Property<T>,ReadOnlyJavaBeanProperty<T>,ReadOnlyProperty<T>,TextInputControl.Content
- Все известные реализующие классы:
-
BooleanBinding,BooleanExpression,BooleanProperty,BooleanPropertyBase,DoubleBinding,DoubleExpression,DoubleProperty,DoublePropertyBase,FloatBinding,FloatExpression,FloatProperty,FloatPropertyBase,IntegerBinding,IntegerExpression,IntegerProperty,IntegerPropertyBase,JavaBeanBooleanProperty,JavaBeanDoubleProperty,JavaBeanFloatProperty,JavaBeanIntegerProperty,JavaBeanLongProperty,JavaBeanObjectProperty,JavaBeanStringProperty,ListBinding,ListExpression,ListProperty,ListPropertyBase,LongBinding,LongExpression,LongProperty,LongPropertyBase,MapBinding,MapExpression,MapProperty,MapPropertyBase,NumberExpressionBase,ObjectBinding,ObjectExpression,ObjectProperty,ObjectPropertyBase,ObservableValueBase,ReadOnlyBooleanProperty,ReadOnlyBooleanPropertyBase,ReadOnlyBooleanWrapper,ReadOnlyDoubleProperty,ReadOnlyDoublePropertyBase,ReadOnlyDoubleWrapper,ReadOnlyFloatProperty,ReadOnlyFloatPropertyBase,ReadOnlyFloatWrapper,ReadOnlyIntegerProperty,ReadOnlyIntegerPropertyBase,ReadOnlyIntegerWrapper,ReadOnlyJavaBeanBooleanProperty,ReadOnlyJavaBeanDoubleProperty,ReadOnlyJavaBeanFloatProperty,ReadOnlyJavaBeanIntegerProperty,ReadOnlyJavaBeanLongProperty,ReadOnlyJavaBeanObjectProperty,ReadOnlyJavaBeanStringProperty,ReadOnlyListProperty,ReadOnlyListPropertyBase,ReadOnlyListWrapper,ReadOnlyLongProperty,ReadOnlyLongPropertyBase,ReadOnlyLongWrapper,ReadOnlyMapProperty,ReadOnlyMapPropertyBase,ReadOnlyMapWrapper,ReadOnlyObjectProperty,ReadOnlyObjectPropertyBase,ReadOnlyObjectWrapper,ReadOnlySetProperty,ReadOnlySetPropertyBase,ReadOnlySetWrapper,ReadOnlyStringProperty,ReadOnlyStringPropertyBase,ReadOnlyStringWrapper,SetBinding,SetExpression,SetProperty,SetPropertyBase,SimpleBooleanProperty,SimpleDoubleProperty,SimpleFloatProperty,SimpleIntegerProperty,SimpleListProperty,SimpleLongProperty,SimpleMapProperty,SimpleObjectProperty,SimpleSetProperty,SimpleStringProperty,SimpleStyleableBooleanProperty,SimpleStyleableDoubleProperty,SimpleStyleableFloatProperty,SimpleStyleableIntegerProperty,SimpleStyleableLongProperty,SimpleStyleableObjectProperty,SimpleStyleableStringProperty,StringBinding,StringExpression,StringProperty,StringPropertyBase,StyleableBooleanProperty,StyleableDoubleProperty,StyleableFloatProperty,StyleableIntegerProperty,StyleableLongProperty,StyleableObjectProperty,StyleableStringProperty
public interface ObservableValue<T> extends Observable
ObservableValue - сущность, которая оборачивает значение и позволяет наблюдать за изменениями значения. В общем случае этот интерфейс не следует реализовывать напрямую, а следует использовать один из его подинтерфейсов (ObservableBooleanValue и т.д.). Значение ObservableValue можно запросить с помощью getValue().
Реализация ObservableValue может поддерживать ленивые вычисления, что означает, что значение не пересчитывается сразу после изменений, а лениво — в следующий раз, когда значение запрашивается (см. примечание 1 в «Требованиях к реализации»).
ObservableValue генерирует два типа событий: события изменения и события инвалидации. Событие изменения указывает на то, что значение изменилось (см. примечание 2 в «Требованиях к реализации»). Событие инвалидации генерируется, если текущее значение больше недействительно. Это различие становится важным, если ObservableValue поддерживает ленивые вычисления, поскольку для лениво вычисляемого значения неизвестно, действительно ли изменилось недействительное значение, пока оно не будет пересчитано. По этой причине для генерации событий изменения требуется жадное вычисление, а события инвалидации можно генерировать для жадных и ленивых реализаций.
Реализации этого класса должны стремиться генерировать как можно меньше событий, чтобы избежать чрезмерной траты времени на обработчики событий. Реализации в этой библиотеке помечают себя как недействительные при возникновении первого события инвалидации. Они не генерируют больше событий инвалидации, пока их значение не будет пересчитано и не станет действительным снова.
К ObservableValue можно присоединить два типа слушателей: InvalidationListener для прослушивания событий инвалидации и ChangeListener для прослушивания событий изменения.
Важное примечание: присоединение ChangeListener принудительно выполняет жадное вычисление, даже если реализация ObservableValue поддерживает ленивые вычисления.
- Требования к реализации:
- Все привязки и свойства в библиотеке JavaFX поддерживают ленивые вычисления.
- Все реализующие классы в библиотеке JavaFX проверяют изменение, используя равенство ссылок (а не равенство объектов,
Object#equals(Object)) значения.
- С:
- JavaFX 2.0
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
addListener |
Добавляет ChangeListener, который будет уведомляться всякий раз, когда значение ObservableValue изменяется. |
default <U> ObservableValue |
flatMap |
Возвращает ObservableValue, содержащий значение ObservableValue, полученное путем применения заданной функции отображения к этому значению. |
T |
getValue() |
Возвращает текущее значение этого ObservableValue
|
default <U> ObservableValue |
map |
Возвращает ObservableValue, содержащий результат применения заданной функции отображения к этому значению. |
default ObservableValue |
orElse |
Возвращает ObservableValue, содержащий это значение или заданную константу, если оно null. |
void |
removeListener |
Удаляет заданного слушателя из списка слушателей, которые уведомляются всякий раз, когда значение ObservableValue изменяется. |
default Subscription |
subscribe |
Создает Subscription на этом ObservableValue, который вызывает заданный changeSubscriber со старым и новым значением всякий раз, когда его значение изменяется. |
default Subscription |
subscribe |
Создает Subscription на этом ObservableValue, который немедленно предоставляет текущее значение заданному valueSubscriber, а затем любые последующие значения при изменении его значения. |
default ObservableValue |
when |
Возвращает ObservableValue, содержащий это значение и обновляемый только тогда, когда condition содержит true. |
Методы, объявленные в интерфейсе javafx.beans.Observable
addListener, removeListener, subscribe
Подробное описание методов
addListener
void addListener(ChangeListener<? super T> listener)
ChangeListener, который будет уведомляться всякий раз, когда изменяется значение ObservableValue. Если один и тот же слушатель добавляется более одного раза, он будет уведомляться более одного раза. То есть, проверка уникальности не выполняется. Обратите внимание, что один и тот же экземпляр ChangeListener может быть безопасно зарегистрирован для разных ObservableValues.
ObservableValue хранит сильную ссылку на слушателя, что предотвратит сборку мусора слушателя и может привести к утечке памяти. Рекомендуется либо отменить регистрацию слушателя, вызвав removeListener после использования, либо использовать экземпляр WeakChangeListener, чтобы избежать этой ситуации.
- Параметры:
-
listener- слушатель для регистрации - Исключения:
-
NullPointerException- если слушатель равен null - См. также:
removeListener
void removeListener(ChangeListener<? super T> listener)
ObservableValue. Если заданный слушатель ранее не был зарегистрирован (т.е. он никогда не добавлялся), то вызов этого метода является пустым. Если он был ранее добавлен, то он будет удален. Если он был добавлен более одного раза, то будет удалён только первый экземпляр.
- Параметры:
-
listener- слушатель для удаления - Исключения:
-
NullPointerException- если слушатель равен null - См. также:
getValue
T getValue()
ObservableValue
- Возвращает:
- Текущее значение
map
default <U> ObservableValue<U> map(Function<? super T,? extends U> mapper)
ObservableValue, содержащий результат применения заданной функции преобразования к этому значению. Результат обновляется при изменении этого ObservableValue. Если это значение равно null, преобразование не применяется, и результирующее значение также равно null. Например, преобразование строки в строку в верхнем регистре:
var text = new SimpleStringProperty("abcd");
ObservableValue<String> upperCase = text.map(String::toUpperCase);
upperCase.getValue(); // Returns "ABCD"
text.set("xyz");
upperCase.getValue(); // Returns "XYZ"
text.set(null);
upperCase.getValue(); // Returns null
- Параметры типа:
-
U- тип значений, хранимых результирующимObservableValue - Параметры:
-
mapper- функция преобразования для применения к значению, не может бытьnull - Возвращает:
ObservableValue, содержащий результат применения заданной функции преобразования к этому значению, илиnull, когда оно равноnull; никогда не возвращаетnull- Исключения:
-
NullPointerException- если функция преобразования равнаnull - С тех пор:
- 19
orElse
default ObservableValue<T> orElse(T constant)
ObservableValue, содержащий это значение, или заданное значение по умолчанию, если оно равно null. Результат обновляется при изменении этого ObservableValue. Этот метод, в сочетании с map(Function), позволяет обрабатывать все значения, включая null. Например, преобразование строки в строку в верхнем регистре, но оставляя пустым, если вход равен null:
var text = new SimpleStringProperty("abcd");
ObservableValue<String> upperCase = text.map(String::toUpperCase).orElse("");
upperCase.getValue(); // Returns "ABCD"
text.set(null);
upperCase.getValue(); // Returns ""
- Параметры:
-
constant- значение по умолчанию для использования, когда этотObservableValueсодержитnull; может бытьnull - Возвращает:
ObservableValue, содержащий это значение, или заданное значение по умолчанию, если оно равноnull; никогда не возвращаетnull- С тех пор:
- 19
flatMap
default <U> ObservableValue<U> flatMap(Function<? super T,? extends ObservableValue<? extends U>> mapper)
ObservableValue, содержащий значение ObservableValue, полученное путем применения заданной функции преобразования к этому значению. Результат обновляется при изменении либо этого ObservableValue, либо ObservableValue, полученного в результате преобразования. Если это значение равно null, преобразование не применяется, и результирующее значение равно null. Если преобразование привело к null, то результирующее значение также равно null. Этот метод аналогичен map(Function), но функция преобразования — это функция, результат которой уже является ObservableValue, и если она вызвана, flatMap не обернёт его в дополнительный ObservableValue.
Например, свойство, которое является true только когда элемент пользовательского интерфейса является частью Scene, который является частью Window, который в данный момент отображается на экране:
ObservableValue<Boolean> isShowing = listView.sceneProperty()
.flatMap(Scene::windowProperty)
.flatMap(Window::showingProperty)
.orElse(false);
// Assuming the listView is currently shown to the user, then:
isShowing.getValue(); // Returns true
listView.getScene().getWindow().hide();
isShowing.getValue(); // Returns false
listView.getScene().getWindow().show();
isShowing.getValue(); // Returns true
listView.getParent().getChildren().remove(listView);
isShowing.getValue(); // Returns false
Изменения в любом из значений: сцены listView, окна этой сцены или отображения этого окна обновит булево значение isShowing. Этот метод предпочтительнее Bindings методов, так как он является безошибочным.
- Параметры типа:
-
U- тип значений, хранимых результирующимObservableValue - Параметры:
-
mapper- функция преобразования для применения к значению, не может бытьnull - Возвращает:
ObservableValue, содержащий значениеObservableValue, полученное путем применения заданной функции преобразования к этому значению, илиnull, когда значение равноnull; никогда не возвращаетnull- Исключения:
-
NullPointerException- если функция преобразования равнаnull - С тех пор:
- 19
when
default ObservableValue<T> when(ObservableValue<Boolean> condition)
ObservableValue, содержащий это значение и обновляющийся только тогда, когда condition содержит true. Возвращаемый ObservableValue наблюдает только за этим значением, когда condition содержит true. Это позволяет этому ObservableValue и условному ObservableValue быть удалёнными из памяти, если ни тот, ни другой не ссылаются иначе, когда condition содержит false. Это в отличие от общего поведения связей, где связь освобождается от памяти только тогда, когда она сама не наблюдается.
condition, содержащий null, рассматривается как содержащий false.
Например:
Property<Boolean> condition = new SimpleBooleanProperty(true);
Property<String> longLivedProperty = new SimpleStringProperty("A");
ObservableValue<String> whenProperty = longLivedProperty.when(condition);
// observe whenProperty, which will in turn observe longLivedProperty
whenProperty.addListener((ov, old, current) -> System.out.println(current));
longLivedProperty.setValue("B"); // "B" is printed
condition.setValue(false);
// After condition becomes false, whenProperty stops observing longLivedProperty; condition
// and whenProperty may now be eligible for GC despite being observed by the ChangeListener
longLivedProperty.setValue("C"); // nothing is printed
longLivedProperty.setValue("D"); // nothing is printed
condition.setValue(true); // longLivedProperty is observed again, and "D" is printed
- Параметры:
-
condition- булевоеObservableValue, не может бытьnull - Возвращает:
ObservableValue, содержащий это значение, когда заданное условие равноtrue, в противном случае содержит последнее увиденное значение; никогда не возвращаетnull- С тех пор:
- 20
subscribe
default Subscription subscribe(BiConsumer<? super T,? super T> changeSubscriber)
Subscription на этом ObservableValue, который вызывает заданный changeSubscriber со старым и новым значением всякий раз, когда его значение изменяется. Предоставленный подписчик подобен ChangeListener без параметра ObservableValue. Параметры, передаваемые в BiConsumer, представляют собой старое и новое значения соответственно.
Обратите внимание, что тот же экземпляр подписчика может быть безопасно подписан на разные Observables.
Также обратите внимание, что при подписке на Observable с более длительным жизненным циклом, чем у подписчика, подписчик должен быть отписан, когда он больше не нужен, так как подписка в противном случае помешает подписчику быть собранным сборщиком мусора. Рассмотрите возможность создания производного ObservableValue с использованием when(ObservableValue) и подписку на это производное наблюдаемое значение для автоматической отвязки жизненного цикла подписчика от этого ObservableValue, когда выполняется некоторое условие.
- Параметры:
-
changeSubscriber-BiConsumerдля предоставления старого и нового значения этогоObservableValue, не может бытьnull - Возвращает:
Subscription, который может быть использован для отмены этой подписки, никогда неnull- Исключения:
-
NullPointerException- если подписчик равенnull - С тех пор:
- 21
- См. также:
подписаться
default Subscription subscribe(Consumer<? super T> valueSubscriber)
ObservableValue, которая немедленно предоставляет текущее значение заданному valueSubscriber, а затем любые последующие значения всякий раз, когда его значение изменяется. valueSubscriber вызывается немедленно для удобства, так как обычно пользователь хочет инициализировать значение, а затем обновлять его при изменении. Обратите внимание, что один и тот же экземпляр подписчика может быть безопасно подписан на разные Observables.
Также обратите внимание, что при подписке на Observable с более длительным жизненным циклом, чем у подписчика, подписчик должен быть отписан, когда он больше не нужен, так как в противном случае подписка не позволит подписчику быть удалён из памяти. Рассмотрите возможность создания производного ObservableValue с использованием when(ObservableValue) и подписки на это производное наблюдаемое значение, чтобы автоматически отвязать жизненный цикл подписчика от этого ObservableValue при выполнении некоторого условия.
- Параметры:
-
valueSubscriber-Consumerдля обработки значений этогоObservableValue, не может бытьnull - Возвращает:
Subscription, которая может быть использована для отмены этой подписки, никогда неnull- Исключения:
-
NullPointerException- если подписчикnull - С:
- 21
© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.