【问题标题】:Can you program Java collections to an interface and use Serializable?您可以将 Java 集合编程为接口并使用 Serializable 吗?
【发布时间】:2009-06-16 21:03:51
【问题描述】:

我已经完成了所有域级逻辑并将其编程为接口。现在我发现当我想将数据放入一个 bean 时,这个 bean 不起作用,因为 Collection 接口(Collection、List、Set 等)没有实现 Serializable。

我需要重构我的所有代码以使用具体类型还是这里有更好的操作方案?

【问题讨论】:

    标签: java serialization collections interface javabeans


    【解决方案1】:

    如果你的类实现了Serializable 并且它的所有成员都是可序列化的,那么对象就可以被正确序列化。示例:

    public class Person implements Serializable {
        private String name;
        private Collection<Integer> luckyNumbers = new ArrayList<Integer>();
    }
    

    只要luckyNumbers的实例是可序列化的(如ArrayList),其成员是可序列化的(本例为Integers),那么对象就会被序列化。

    【讨论】:

    • 我相信我的实例是可序列化的。这仅适用于 Java 5 吗?
    • 你有参考吗?你测试过这个吗?如果是这样,我会删除我的答案。
    • 不,这也适用于 java 1.4。如果您的集合是可序列化的,例如 ArrayList,您的类将正确序列化。
    • 在序列化时尝试捕获 NotSerializableException,它应该会指导你什么是不可序列化的。
    【解决方案2】:

    Serializable 是一个“标记”接口。不适合用作引用的类型。使用一些动态类型(尽管没有什么可以阻止您使用外部静态类型检查器)。

    你可以用奇怪的参数化泛型方法跳过箍,但这会非常难看,而且 Java 库不会这样做,所以无论如何你都会被淹没。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-04
      • 2011-12-18
      • 1970-01-01
      • 2015-11-17
      • 2010-10-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多