Класс DefaultPersistenceDelegate

public class DefaultPersistenceDelegate
extends PersistenceDelegate

Класс DefaultPersistenceDelegate является конкретной реализацией абстрактного класса PersistenceDelegate и является делегатом, используемым по умолчанию для классов, о которых нет информации. Класс DefaultPersistenceDelegate обеспечивает сохранение состояния, совместимое с версиями, на основе публичного API для классов, которые следуют соглашениям JavaBeans™, без какой-либо специфичной для класса конфигурации.

Ключевыми предположениями являются наличие конструктора без аргументов и то, что состояние класса точно представлено соответствующими парами методов «setter» и «getter» в порядке, в котором они возвращаются интроспектором. Помимо предоставления сохранения состояния без кода для JavaBeans, DefaultPersistenceDelegate предоставляет удобный способ для сохранения состояния для классов, имеющих конструктор, который, хотя и не является конструктором без аргументов, просто требует некоторых значений свойств в качестве аргументов.

Since:
1.4
See Also:
DefaultPersistenceDelegate(String[]), Introspector

Конструкторы

Конструктор Описание
DefaultPersistenceDelegate()

Создаёт делегат сохранения для класса с конструктором без аргументов.

DefaultPersistenceDelegate​(String[] constructorPropertyNames)

Создаёт делегат сохранения по умолчанию для класса с конструктором, аргументы которого являются значениями имён свойств, как указано в constructorPropertyNames.

Методы

Модификатор и тип Метод Описание
protected void initialize​(Class<?> type, Object oldInstance, Object newInstance, Encoder out)

Эта реализация метода initialize по умолчанию предполагает, что всё состояние объектов этого типа отображается через соответствующие пары методов «setter» и «getter» в порядке, в котором они возвращаются интроспектором.

protected Expression instantiate​(Object oldInstance, Encoder out)

Эта реализация метода instantiate по умолчанию возвращает выражение, содержащее предопределённое имя метода «new», которое обозначает вызов конструктора с аргументами, как указано в конструкторе DefaultPersistenceDelegate.

protected boolean mutatesTo​(Object oldInstance, Object newInstance)

Если количество аргументов в указанном конструкторе не равно нулю, и класс oldInstance явно объявляет метод «equals», этот метод возвращает значение oldInstance.equals(newInstance).

Методы, объявленные в классе java.beans.PersistenceDelegate

writeObject

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Конструкторы

DefaultPersistenceDelegate

public DefaultPersistenceDelegate()

Создаёт делегат сохранения для класса с конструктором без аргументов.

See Also:
DefaultPersistenceDelegate(java.lang.String[])

DefaultPersistenceDelegate

public DefaultPersistenceDelegate(String[] constructorPropertyNames)

Создаёт делегат сохранения по умолчанию для класса с конструктором, аргументы которого являются значениями имён свойств, как указано в constructorPropertyNames. Аргументы конструктора создаются путём вычисления имён свойств в порядке их предоставления. Для использования этого класса для указания одного предпочтительного конструктора для сериализации определённого типа, мы указываем имена свойств, которые образуют аргументы конструктора. Например, класс Font, который не определяет конструктор без аргументов, может быть обработан с помощью следующего делегата сохранения:

new DefaultPersistenceDelegate(new String[]{"name", "style", "size"});

Parameters:
constructorPropertyNames - Имена свойств для аргументов этого конструктора.
See Also:
instantiate(java.lang.Object, java.beans.Encoder)

Методы

mutatesTo

protected boolean mutatesTo(Object oldInstance,
                            Object newInstance)

Если количество аргументов в указанном конструкторе не равно нулю, и класс oldInstance явно объявляет метод «equals», этот метод возвращает значение oldInstance.equals(newInstance). В противном случае, этот метод использует определение суперкласса, которое возвращает true, если классы двух экземпляров равны.

Overrides:
mutatesTo in class PersistenceDelegate
Parameters:
oldInstance - Экземпляр, подлежащий копированию.
newInstance - Экземпляр, подлежащий модификации.
Returns:
True, если эквивалентная копия newInstance может быть создана путём применения ряда мутаций к oldInstance.
See Also:
DefaultPersistenceDelegate(String[])

instantiate

protected Expression instantiate(Object oldInstance,
                                 Encoder out)

Эта реализация метода instantiate по умолчанию возвращает выражение, содержащее предопределённое имя метода «new», которое обозначает вызов конструктора с аргументами, как указано в конструкторе DefaultPersistenceDelegate.

Specified by:
instantiate in class PersistenceDelegate
Parameters:
oldInstance - Экземпляр, подлежащий созданию.
out - Поток вывода кода.
Returns:
Выражение, значение которого равно oldInstance.
Throws:
NullPointerException - если out имеет значение null и это значение используется в методе
See Also:
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 вносятся побочные эффекты. В большинстве случаев это позволяет решить проблему свойств, значения которых зависят друг от друга, так как это помогает процессу сериализации, уменьшая количество операторов, которые необходимо записать в выходной поток. В целом, проблема обработки взаимозависимых свойств сводится к поиску порядка свойств в классе, таком, что значение одного свойства не зависит от значения последующего свойства.

Overrides:
initialize in class PersistenceDelegate
Parameters:
type - тип экземпляров
oldInstance - Экземпляр, подлежащий копированию.
newInstance - Экземпляр, подлежащий модификации.
out - Поток, в который следует записать операторы инициализации.
Throws:
NullPointerException - если out имеет значение null
See Also:
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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/beans/DefaultPersistenceDelegate.html

Spec-Zone .ru
спецификации, руководства, описания, API