Как db4o создает объекты?

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

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

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

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

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

2 ответа

Решение

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

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

Горан

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

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

Другие вопросы по тегам