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

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上,我需要将此服务传递给一个片段,这自然只能保存可序列化的对象)。


是的,可以用可序列化包装器包装不可序列化的对象。不,它不会神奇地使被包装的对象序列化。如果您试图序列化包装类(而不生成字段transient),则会得到一个NotSerializableException