Класс DefaultPersistenceDelegate
- java.lang.Object
-
- java.beans.PersistenceDelegate
-
- java.beans.DefaultPersistenceDelegate
public class DefaultPersistenceDelegate extends PersistenceDelegate
Этот DefaultPersistenceDelegate — конкретная реализация абстрактного класса PersistenceDelegate и является по умолчанию делегатом для классов, о которых нет доступной информации. Данный DefaultPersistenceDelegate обеспечивает устойчивое к версиям сохранение с использованием публичного API для классов, соответствующих соглашениям JavaBeans™ без каких-либо специфичных настроек для классов.
Ключевыми предположениями являются наличие нульарного конструктора и то, что состояние класса точно отображается соответствующими парами методов «setter» и «getter» в порядке их возврата интроспекцией. Помимо бесшокового сохранения для JavaBeans, этот DefaultPersistenceDelegate предоставляет удобный способ для сохранения классов, у которых конструктор, хотя и не нульарный, просто требует некоторых значений свойств в качестве аргументов.
- Since:
- 1.4
- См. также:
-
DefaultPersistenceDelegate(String[]),Introspector
Конструкторы
| Конструктор и описание |
|---|
DefaultPersistenceDelegate() Создаёт делегат сохранения для класса с нульарным конструктором. |
DefaultPersistenceDelegate(String[] constructorPropertyNames) Создаёт делегат сохранения по умолчанию для класса с конструктором, аргументами которого являются значения имён свойств, указанных в |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
protected void |
initialize(Class<?> type,
Object oldInstance,
Object newInstance,
Encoder out) Эта реализация метода |
protected Expression |
instantiate(Object oldInstance,
Encoder out) Эта реализация метода |
protected boolean |
mutatesTo(Object oldInstance,
Object newInstance) Если количество аргументов в указанном конструкторе не равно нулю, и класс |
Методы, унаследованные от класса java.beans.PersistenceDelegate
writeObject Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
DefaultPersistenceDelegate
public DefaultPersistenceDelegate()
Создаёт делегат сохранения для класса с нульарным конструктором.
DefaultPersistenceDelegate
public DefaultPersistenceDelegate(String[] constructorPropertyNames)
Создаёт делегат сохранения по умолчанию для класса с конструктором, аргументами которого являются значения имён свойств, указанных в constructorPropertyNames. Аргументы конструктора создаются путём вычисления имён свойств в порядке их предоставления. Для использования этого класса для указания одного предпочтительного конструктора для сериализации определённого типа, указываются имена свойств, составляющие аргументы конструктора. Например, класс Font , который не определяет нульарный конструктор, может быть обработан следующим делегатом сохранения:
new DefaultPersistenceDelegate(new String[]{"name", "style", "size"}); - Параметры:
-
constructorPropertyNames- Имена свойств для аргументов этого конструктора. - См. также:
instantiate(java.lang.Object, java.beans.Encoder)
Методы
mutatesTo
protected boolean mutatesTo(Object oldInstance,
Object newInstance) Если количество аргументов в указанном конструкторе не равно нулю, и класс oldInstance явно объявляет метод «equals», этот метод возвращает значение oldInstance.equals(newInstance). В противном случае, этот метод использует определение суперкласса, которое возвращает true, если классы двух экземпляров равны.
- Переопределяет:
-
mutatesToв классеPersistenceDelegate - Параметры:
-
oldInstance- Экземпляр, который необходимо скопировать. -
newInstance- Экземпляр, который необходимо изменить. - Возвращает:
- True, если эквивалентная копия
newInstanceможет быть создана путём применения ряда мутаций кoldInstance. - См. также:
DefaultPersistenceDelegate(String[])
instantiate
protected Expression instantiate(Object oldInstance,
Encoder out) Эта реализация метода instantiate по умолчанию возвращает выражение, содержащее предопределённое имя метода «new», которое обозначает вызов конструктора с аргументами, указанными в конструкторе DefaultPersistenceDelegate.
- Определено в:
-
instantiateв классеPersistenceDelegate - Параметры:
-
oldInstance- Экземпляр, подлежащий созданию. -
out- Поток вывода кода. - Возвращает:
- Выражение, значение которого равно
oldInstance. - Исключения:
-
NullPointerException- еслиoutимеет значениеnullи это значение используется в методе - См. также:
DefaultPersistenceDelegate(String[])
initialize
protected void initialize(Class<?> type,
Object oldInstance,
Object newInstance,
Encoder out) Эта реализация метода initialize по умолчанию предполагает, что всё состояние, хранящееся в объектах данного типа, представлено через соответствующие пары методов «setter» и «getter» в порядке, в котором они возвращаются интроспектором. Если описание свойства определяет атрибут «transient» со значением, равным Boolean.TRUE, свойство игнорируется этой реализацией по умолчанию. Обратите внимание, что это использование слова «transient» совершенно независимо от модификатора поля, используемого в ObjectOutputStream.
Для каждого не-transient свойства создаётся выражение, в котором применяемый нульарный метод «getter» к oldInstance. Значение этого выражения — значение свойства в экземпляре, который сериализуется. Если значение этого выражения в клонированной среде mutatesTo целевое значение, новое значение инициализируется, чтобы сделать его эквивалентным старому значению. В этом случае, так как значение свойства не изменилось, не нужно вызывать соответствующий метод «setter», и не генерируется ни одной инструкции. В противном случае, выражение для этого значения заменяется другим выражением (обычно конструктором), и вызывается соответствующий метод «setter» для установки нового значения свойства в объект. Данная схема удаляет из выходных данных, создаваемых потоками, использующими этот делегат, информацию по умолчанию.
При передаче этих инструкций в выходной поток, где они будут выполняться, производятся побочные эффекты в newInstance. В большинстве случаев это позволяет решить проблему свойств, значения которых зависят друг от друга, фактически помогая процессу сериализации, уменьшая количество инструкций, которые нужно записать в выходной поток. В общем случае, проблема обработки взаимозависимых свойств сводится к определению порядка свойств в классе таким образом, чтобы ни одно значение свойства не зависело от последующего свойства.
- Переопределяет:
-
initializeв классеPersistenceDelegate - Параметры:
-
type- тип экземпляров -
oldInstance- Экземпляр, который необходимо скопировать. -
newInstance- Экземпляр, который необходимо изменить. -
out- Поток, в который должны быть записаны любые инструкции инициализации. - Исключения:
-
NullPointerException- еслиoutимеет значениеnull - См. также:
-
Introspector.getBeanInfo(java.lang.Class<?>),PropertyDescriptor
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.