Як серіалізовать об’єкт, який не реалізує жодного з інтерфейсів сериализации stack overflow на
Добрий день. Для сериализации об'єкта треба, щоб він реалізовував інтерфейс java.io.Serializable або java.io.Externalizable. Інакше нічого не вийде java.io.NotSerializableException. Але як бути, якщо я використовую сторонні бібліотеки без вихідного коду і мені треба сериализация одного з об'єктів цієї бібліотеки?
Цей об'єкт знаходиться всередині мого класу для сериализации (одне з полів). Припустимо також, що всередині цього об'єкта (з сторонньої бібліотеки) також знаходяться поля класів, які не реалізують жоден з інтерфейсів сериализации.
заданий 19 Жовтня '11 о 12:30
Очевидно, що якщо об'єкти з сторонніх бібліотек не пропонують можливість сериализации, то змусити їх серіалізовані "нативної" у вас не вийде.
Обійти цю проблему можна досить простим способом - обернути кожен об'єкт Entity в, наприклад, EntitySerialiazbleProxy. де написати відповідні сериализации всіх необхідних полів.
Також можливо (цей спосіб гірше, але має право на життя) обійтися без проксі-об'єктів і, наприклад, просто написати ручну сериализацию для всіх ваших об'єктів, які використовують об'єкти з сторонніх бібліотек. У відповідних методах serialize і deserialize ви повинні будете записати потрібні вам поля з об'єктів в потік, або, відповідно, сконструювати ці об'єкти з потоку.
Більш детальне пояснення першого способу.
Нехай є деякий клас Entity:
Зрозуміло, що проксі-об'єкти такого типу можна використовувати всюди, де ми б використовували просто об'єкт Entity.
Зазначу також, що в разі, якщо є багато однотипних несеріалізующіхся об'єктів, то такі речі цілком якомога провернути через дженерики.
Для більшого вникання в суть можете подивитися наступне обговорення.