Spec-Zone.ru › OpenJDK 17

Класс DefaultPersistenceDelegate

java.lang.Object
java.beans.PersistenceDelegate
java.beans.DefaultPersistenceDelegate
public class DefaultPersistenceDelegate extends PersistenceDelegate
Класс DefaultPersistenceDelegate — это конкретная реализация абстрактного класса PersistenceDelegate и по умолчанию используется в качестве делегата для классов, о которых нет доступной информации. Класс DefaultPersistenceDelegate обеспечивает сохранение состояния классов, соответствующих соглашениям JavaBeans, с учётом версий и на основе публичного API, без каких-либо специфичных настроек для конкретного класса.

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

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

Краткое описание конструкторов

Конструктор Описание
DefaultPersistenceDelegate()
Создаёт делегат сохранения состояния для класса с конструктором без параметров.
DefaultPersistenceDelegate(String[] constructorPropertyNames)
Создаёт делегат сохранения состояния по умолчанию для класса с конструктором, аргументы которого являются значениями имён свойств, указанных в constructorPropertyNames. Аргументы конструктора создаются путём оценки имён свойств в порядке их предоставления. Для указания одного предпочтительного конструктора для сериализации конкретного типа используется данный класс, указывающий имена свойств, составляющих аргументы конструктора. Например, класс Font , который не определяет конструктор без параметров, может обрабатываться с помощью следующего делегата сохранения состояния:
     new DefaultPersistenceDelegate(new String[]{"name", "style", "size"});
 

Краткое описание методов

Модификатор и тип Метод Описание
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, 2021, 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/17/docs/api/java.desktop/java/beans/DefaultPersistenceDelegate.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API