在Java中,Collection接口之所以没有扩展Serializable接口,是由于一些充分的原因。另外,这些接口的大多数常见实现都实现了Serializable接口。
因此,如果实现本身是可序列化的(通常情况下是这样的),并且集合中的对象都是可序列化的,则实现了其中一个Collection接口的对象就可以被序列化。
但是我该如何确保这两个条件得到满足呢?我不想遇到运行时错误,因为编译器可以检查这些条件。我在考虑是否可以添加类似于以下例子中List接口的显式接口:
因此,如果实现本身是可序列化的(通常情况下是这样的),并且集合中的对象都是可序列化的,则实现了其中一个Collection接口的对象就可以被序列化。
但是我该如何确保这两个条件得到满足呢?我不想遇到运行时错误,因为编译器可以检查这些条件。我在考虑是否可以添加类似于以下例子中List接口的显式接口:
public interface SerializableList<T extends Serializable> extends Serializable, List<T> {}
我想知道是否还有其他人遇到过这个问题并想出了这个简单的解决方案。到目前为止,我还没有找到任何解决方案或讨论,这让我对我的想法产生了怀疑。
List
引用定义为List<T extends Serializable>
。你不需要自己编写接口。 - Rohit JainArrayList<Serializable>
也不能被序列化。ArrayList 是可序列化的,它只包含 Serializable 的实例。但是,一旦这些包含对象中的任何一个包含了非序列化字段,它就不再是可序列化的。无论你添加多少个通配符限制,你都可能在运行时遇到错误。因此,请使用测试。 - JB Nizet