【发布时间】:2013-07-23 08:23:07
【问题描述】:
在 Java 中,Collection-interfaces 不扩展 Serializable 有几个很好的原因。此外,这些接口的大多数常见实现都实现了 Serializable。
因此,如果实现本身是可序列化的(通常是这种情况)并且如果集合中的对象都是可序列化的,则实现 Collection 接口之一的对象是可序列化的。
但是我怎样才能确保满足这两个条件呢?我不想遇到运行时错误,因为编译器可以检查这些条件。我正在考虑一些明显的界面,例如(列表界面的展示):
public interface SerializableList<T extends Serializable> extends Serializable, List<T> {}
我想知道是否没有其他人面临这个问题并想出了这个简单的解决方案。到目前为止,我无法找到任何解决方案甚至对此进行讨论,这使我对自己的想法产生了怀疑。
【问题讨论】:
-
如果我正确理解您的问题,您可以将您的
List引用设为 -List<T extends Serializable>。您无需推出自己的界面。 -
编译器无法检查。每个实现 Serializable 的类都可以包含一个非瞬态、不可序列化的字段,这将导致运行时异常。如果 ArrayList
-
@RohitJain:您的提议仅保证列表中的对象是可序列化的,但不保证列表实现本身。
-
你没有抓到我。即使是
ArrayList<Serializable>也无法序列化。 ArrayList 是可序列化的。它只包含 Serializable 的实例。但是一旦这些包含的对象中的一个包含不可序列化的字段,它就不再是可序列化的。无论添加多少通用边界,运行时都可能出现错误。所以使用测试。 -
是的。并且当您希望它可序列化时使用不可序列化的集合也是一个错误。通过编写测试来发现错误。
标签: java serialization collections