Класс 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
- See Also:
-
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"});
- 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:
-
mutatesToin classPersistenceDelegate - Parameters:
-
oldInstance- Экземпляр, подлежащий копированию. -
newInstance- Экземпляр, подлежащий модификации. - Returns:
- True, если эквивалентная копия
newInstanceможет быть создана путём применения ряда мутаций кoldInstance. - See Also:
DefaultPersistenceDelegate(String[])
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:
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:
-
initializein classPersistenceDelegate - 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