Вопрос

Какой механизм db4o использует для создания экземпляров хранимых объектов?

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

Несмотря на это, db4o по-прежнему может создавать экземпляры хранимых объектов этого класса (хотя и с неправильными значениями).

Если я смогу понять механизм, возможно, я смогу отследить имеющуюся у меня ошибку.

Буду признателен за любые ссылки :]

Это было полезно?

Решение

Db4o имеет открытый исходный код, поэтому вы можете взглянуть на исходный код.Основная идея заключается в использовании обработчики типов которые позволяют сериализацию и десериализацию объектов.Есть простой пример поставщик для опытных пользователей, которым требуется обработчик специального типа. Строительство объекта можно использовать конструкторы или обойти конструктор, если подходящего конструктора не существует.Упомянутую ошибку конструктора можно предотвратить, используя настройки конфигурации, которые предписывают db4o в любом случае вызывать конструкторы.

Возможно, вы захотите опубликовать этот вопрос на db4o. форумы чтобы получить более подробное объяснение от разработчиков.

Горан

Другие советы

Он использует специальный API Sun (или другого JVM) для создания экземпляров объектов без проверки доступа и запуска конструкторов.

Ошибка, которая у вас возникла, скорее всего, связана с тем, что не были запущены никакие конструкторы, в том числе неявные, которые устанавливают значения по умолчанию для полей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top