序列化一个没有实现可序列化的类变量

时间:2013-09-05 18:05:42

标签: java serialization

我有一个实现Serializable的类。类中还有一个其他类对象,它不实现可序列化。如何序列化该类的成员应该怎么做。

我的班级是这样的

public class Employee implements Serializable{
    private String name;
    private Address address;
}


public class Address{
    private String street; 
    private String area;   
    private String city;
}

在这里,我没有访问Address类来使其实现Serializable。请帮忙。提前致谢

3 个答案:

答案 0 :(得分:6)

当然,有Serializable的明显解决方案。我明白并不总是一种选择。

也许你可以扩展Address并将Serializable放在你做的孩子身上。然后,您将其Employee设置为Child字段而不是Address字段。

以下是其他一些需要考虑的事项:

  • 可以Employee.address字段保留为Address类型。如果您拨打Employee.setAddress(new SerializableAddress())
  • ,可以序列化
  • 如果Address为空,即使Address的类型不可序列化,您也可以序列化整个员工。
  • 如果您将Address标记为瞬态,则会跳过尝试序列化Address。这可以解决您的问题。

然后还有其他"序列化"像XStream这样的框架不需要标记界面才能工作。这取决于您的要求,但这是否是一个选项。

答案 1 :(得分:1)

您可以直接将此Address类序列化,因为您无权修改它。

选项很少:

  • 创建Address类的子类并使用它。您可以将此类标记为可序列化。
  • 将地址标记为瞬态。

请查看此stackoverflow链接

答案 2 :(得分:0)

如果您可以选择使用第三方库进行序列化,那么您可以使用例如kryo。这有一个默认的序列化,不需要实现接口或注释字段。

您可以查看Which is the best alternative for Java Serialization?以了解更多选择。