我可以在本地嵌套的可序列化类中包装一个不可序列化的类吗?

时间:2014-10-15 15:15:33

标签: java serialization nested-class

我想知道,如果我可以通过将它们包装在本地嵌套类中来欺骗序列化,就像这样:

我有一个我需要传递的服务,但它内部有一些非常复杂的数据。

 interface ComplexService {
       IncredibleComplexObject getData();
   }

所以我考虑将它包装在另一个可通过装饰器模式序列化的类中。

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实际上可以重新创建依赖于我最终的ComplexService参数的类,那将会有点太神奇了。但我想知道,为什么这个失败了,会抛出什么异常,在哪里以及为什么。


(只是为了澄清我为什么要这样做:我在Android上,我需要将这个服务传递给Fragment,它自然只能保存可序列化的对象)。

1 个答案:

答案 0 :(得分:1)

是的,您可以将非可序列化对象包装在可序列化的包装器中。不,它不会神奇地使包装对象可序列化。如果您尝试序列化包装类(没有创建该字段NotSerializableException),您将获得transient