Can I wrap a non-serializeable class in a local nested serializeable class?
我想知道,如果我可以通过将它们包装在本地嵌套类中来欺骗序列化,比如:
我有一个需要传递的服务,但是它内部有一些非常复杂的数据。
1 2 3 | interface ComplexService { IncredibleComplexObject getData(); } |
所以我考虑用另一个可以通过decorator模式序列化的类来包装它。
1 2 3 4 5 6 7 8 9 10 11 12 | public final class Utils { public static Serializable wrap(final ComplexService service) { class WrapperService implements ComplexService, Serializeable { @Override public IncredibleComplexData getData() { return service.getData(); } }; return new WrapperService(); } } |
号
事实上,我不相信我能欺骗这样的序列化,因为如果Java实际上可以重建我的类,这取决于我最后一个复杂的服务参数,这将有点太神奇了。但我想知道,为什么这一切都失败了,会抛出什么异常,在哪里,为什么。
(只是为了澄清我为什么要这样做:我在Android上,我需要将此服务传递给一个片段,这自然只能保存可序列化的对象)。
是的,可以用可序列化包装器包装不可序列化的对象。不,它不会神奇地使被包装的对象序列化。如果您试图序列化包装类(而不生成字段