Класс DefaultPersistenceDelegate
public class DefaultPersistenceDelegate extends PersistenceDelegate
DefaultPersistenceDelegate — это конкретная реализация абстрактного класса PersistenceDelegate и по умолчанию используется в качестве делегата для классов, о которых нет доступной информации. Класс DefaultPersistenceDelegate обеспечивает сохранение состояния классов, соответствующих соглашениям JavaBeans, с учётом версий и на основе публичного API, без каких-либо специфичных настроек для конкретного класса. Основные предположения: класс имеет конструктор без параметров и что его состояние точно отражается соответствием пар методов «setter» и «getter» в порядке их возвращения интроспектором. Помимо предоставления сохранения состояния для JavaBeans без кода, DefaultPersistenceDelegate предоставляет удобный способ сохранения состояния классов, имеющих конструктор, который, хотя и не является конструктором без параметров, просто требует некоторых значений свойств в качестве аргументов.
- Since:
- 1.4
- See Also:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
DefaultPersistenceDelegate() |
Создаёт делегат сохранения состояния для класса с конструктором без параметров. |
DefaultPersistenceDelegate |
Создаёт делегат сохранения состояния по умолчанию для класса с конструктором, аргументы которого являются значениями имён свойств, указанных в constructorPropertyNames. Аргументы конструктора создаются путём оценки имён свойств в порядке их предоставления. Для указания одного предпочтительного конструктора для сериализации конкретного типа используется данный класс, указывающий имена свойств, составляющих аргументы конструктора. Например, класс Font , который не определяет конструктор без параметров, может обрабатываться с помощью следующего делегата сохранения состояния:
new DefaultPersistenceDelegate(new String[]{"name", "style", "size"});
|
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected void |
initialize |
Данная реализация метода initialize по умолчанию предполагает, что все данные объекта данного типа доступны через соответствующие пары методов «setter» и «getter» в порядке их возвращения интроспектором. |
protected Expression |
instantiate |
Данная реализация метода instantiate по умолчанию возвращает выражение, содержащее предварительно определённое имя метода «new», которое обозначает вызов конструктора с аргументами, указанными в конструкторе DefaultPersistenceDelegate. |
protected boolean |
mutatesTo |
Если количество аргументов в указанном конструкторе не равно нулю, и класс oldInstance явно объявляет метод «equals», этот метод возвращает значение oldInstance.equals(newInstance). |
Методы, унаследованные от класса java.beans.PersistenceDelegate
writeObject
Подробное описание конструкторов
DefaultPersistenceDelegate
public DefaultPersistenceDelegate()
DefaultPersistenceDelegate
public DefaultPersistenceDelegate(String[] constructorPropertyNames)
constructorPropertyNames. Аргументы конструктора создаются путём оценки имён свойств в порядке их предоставления. Для указания одного предпочтительного конструктора для сериализации конкретного типа используется данный класс, указывающий имена свойств, составляющих аргументы конструктора. Например, класс Font , который не определяет конструктор без параметров, может обрабатываться с помощью следующего делегата сохранения состояния:
new DefaultPersistenceDelegate(new String[]{"name", "style", "size"});
- Parameters:
-
constructorPropertyNames- Имена свойств для аргументов этого конструктора. - See Also:
Подробное описание методов
mutatesTo
protected boolean mutatesTo(Object oldInstance, Object newInstance)
oldInstance явно объявляет метод «equals», этот метод возвращает значение oldInstance.equals(newInstance). В противном случае этот метод использует определение суперкласса, которое возвращает true, если классы двух экземпляров равны.- Overrides:
-
mutatesToin classPersistenceDelegate - Parameters:
-
oldInstance- Экземпляр, который нужно скопировать. -
newInstance- Экземпляр, который нужно изменить. - Returns:
- True, если эквивалентная копия
newInstanceможет быть создана путём применения серии мутаций кoldInstance. - See Also:
instantiate
protected Expression instantiate(Object oldInstance, Encoder out)
instantiate по умолчанию возвращает выражение, содержащее предварительно определённое имя метода «new», которое обозначает вызов конструктора с аргументами, указанными в конструкторе DefaultPersistenceDelegate.- Specified by:
-
instantiatein classPersistenceDelegate - Parameters:
-
oldInstance- Экземпляр, подлежащий созданию. -
out- Поток вывода кода. - Returns:
- Выражение, значение которого равно
oldInstance. - Throws:
-
NullPointerException- еслиoutравенnullи это значение используется в методе - See Also:
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:
-
initializein classPersistenceDelegate - Parameters:
-
type- тип экземпляров -
oldInstance- Экземпляр, подлежащий копированию. -
newInstance- Экземпляр, который нужно изменить. -
out- Поток, в который следует записать операторы инициализации. - Throws:
-
NullPointerException- еслиoutравенnull - See Also:
© 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