只要它实现Serializable,任何事都可以序列化吗?

时间:2011-07-06 23:10:41

标签: java serialization

我已经看过了:How to test in java that a class implements serializable correctly

我只是有一个更普遍的问题。如果你创建一个像这样的对象(比如圆圈)(假设有进口):

class Circle implements Serializable {
     int radius;
     Circle(int radius){
         this.radius = radius;
     }

     public void updateRadius(int radius){
         this.radius = radius
     }

     public int getRadius(){
         return radius;
     }
}

它是否需要可序列化所需的全部内容?我是否需要添加更多方法才能正确序列化?我有一个更复杂的课程,但是当这应该提供充足的例子时,不想发布所有的课程。

3 个答案:

答案 0 :(得分:6)

所有实例变量也需要可序列化。当您使用外部库并且“serializable”类包含对非可序列化类的引用时,这可能会导致问题。

答案 1 :(得分:1)

是的,只要所有引用对象的传递闭包都是可序列化的,它就是您所需要的。

注意这并不意味着反序列化的对象实际上会起作用 - 这取决于“Circle”的语义。失败的最简单方法是新的目标 副本,而不是相同的对象。

答案 2 :(得分:0)

非常简单的答案。

假设您居住在加拿大的某个省份,需要用法语进行所有商务沟通。

您的公司名称很可能。它执行债务收集,垃圾邮件营销和用户跟踪服务。

您的母公司是la connerie。贵公司没有法语进行债务催收,垃圾邮件营销和用户跟踪服务。无论如何,您的母公司la connerie无论如何都会为您的公司进行所有交易,并且他们可以用法语进行债务收集,垃圾邮件营销和用户跟踪服务。因此,您的公司不会受到省政府当局的搜查 - 不用担心。

实际上,la connerie没有法语进行债务催收,垃圾邮件营销和用户跟踪服务的设施,因为它实际上是由一家控股公司拥有的。 du fumier拥有以法语进行债务收集,垃圾邮件营销和用户跟踪服务的设施,并为所有子实体提供服务。

因此,杜鹃伞下的每个小企业实体都可以安全地声明他们实施法国债务催收,垃圾邮件营销和用户跟踪服务,而无需他们自己设施进行此类法国商务沟通,因为他们依赖于杜为他们做这件事。

有一天,贵公司决定收购另一家公司les merdes du chevre,他们的业务是收债。该公司是新成立的,实际上是一个空壳。但它对法国省语言当局是安全的,因为它可以依靠贵公司用法语进行债务催收。因此,les merdes du chevre可以高兴地宣布他们实施法国的债务催收服务而不必动手做任何事情。

下周,贵公司收购了另一家生产蟹肉副产品的公司。但是,他们没有法国出售蟹肉副产品的设施。因此,你将不得不创建一个部门来销售法国的crabby副产品IMPLEMENT。如果不这样做,省语言当局将把你的公司拖到法庭上,而不是以法语销售蟹肉副产品。

但是,如果你宣布les crapes des crabes是一个暂时的实体,你可以逃避语言当局的起诉/迫害。你是为了将它转移到英国哥伦比亚而获得它,并且你从来没有打算积极利用该公司在该省销售蟹肉副产品。