【问题标题】:Serializable a object properties too也可序列化对象属性
【发布时间】:2012-10-22 11:22:47
【问题描述】:

当我在类中有Serializable 时,是否需要将Serializable 添加到类中的所有对象中?

例如,

public class User implements Serializable{

private List<Role> role;
private Task task;
}

我还需要将Serializable 添加到RoleTask 吗?

public class Task implements Serializable{
    // ...
}

public class Role implements Serializable{
    // ...
}

【问题讨论】:

标签: java serializable object-serialization


【解决方案1】:

是的,你知道;如果您的类TaskRole 不是Serializable,如果您尝试序列化User 的实例,您将获得java.io.NotSerializableException

当然,如果TaskRole 包含其他非原始、非瞬态字段,它们也必须是Serializable,等等。

【讨论】:

  • 还有这样的事情:
【解决方案2】:

这是最简单的选择。

另一种选择是使这些字段瞬态并“覆盖” writeObject 和 readObject 以实现您自己的这些类的序列化。这不太可能值得付出额外的努力。

顺便说一句:如果您有一个嵌套类,则外部类需要是可序列化的,并且即使您不使用嵌套类,它也会隐式引用它。出于这个原因和其他原因,我建议尽可能制作嵌套类 static

【讨论】:

    【解决方案3】:

    简短回答:是的。 可序列化类中的每个对象都必须自己可序列化。否则无法恢复所有属性或其他任何内容。

    此外,您在尝试序列化此对象时也会遇到异常。

    【讨论】:

      【解决方案4】:

      来自文档

      未实现此接口的类将不会对其状态进行任何序列化或反序列化。

      所以是的。

      Please read

      【讨论】:

        【解决方案5】:

        Serializable 是的,因为:

        Classes that do not implement this interface will not have any of their state
        serialized or deserialized. All subtypes of a serializable class are themselves 
        serializable. The serialization interface has no methods or fields and serves 
        only to identify the semantics of being serializable.
        

        如果您尝试序列化实现 Serializable 的类的对象,但该对象包含对非 Serializable 类的引用,则将在运行时抛出 NotSerializableException

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-28
          • 1970-01-01
          • 1970-01-01
          • 2013-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多