【发布时间】:2014-12-10 17:43:00
【问题描述】:
我想知道,如果我可以通过将它们包装在本地嵌套类中来欺骗序列化,就像这样:
我有一个需要传递的服务,但它内部有一些非常复杂的数据。
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,它自然只能保存可序列化的对象)。
【问题讨论】:
-
ComplexService 不能也可序列化(即扩展 Serializable)吗?
-
ComplexService本身不能序列化,因为它的实际实现会将IncredibleComplexObject缓存在一个字段中,因此不能序列化。 -
IncredibleComplexObject 不能被序列化吗? :P 不管怎样,在你把它包装在 WrapperService 之后,你怎么能从外面调用 getData() 呢?这是一个内部方法类...
标签: java serialization nested-class