我想知道,如果我可以通过将它们包装在本地嵌套类中来欺骗序列化,就像这样:
我有一个我需要传递的服务,但它内部有一些非常复杂的数据。
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,它自然只能保存可序列化的对象)。
答案 0 :(得分:1)
是的,您可以将非可序列化对象包装在可序列化的包装器中。不,它不会神奇地使包装对象可序列化。如果您尝试序列化包装类(没有创建该字段NotSerializableException
),您将获得transient
。