为什么java.util.List不实现Serializable?

为什么它不实现,而子类像,做?这似乎不是违反继承原则吗?例如,如果我们想通过网络发送Linkedlist,我们必须写:java.util.ListSerializableLinkedListArraylist

new ObjectOutputStream(some inputStream).writeObject(some LinkedList);

到目前为止,一切都很好,但是在阅读另一边的对象时,我们必须明确地说而不是。如果我们要将写入功能从 更改为 ,我们还必须更改读取部分。实施将解决问题。LinkedList l = (LinkedList)objectInputStream.readObject();List l = (List)objectInputStream.readObject();LinkedListArrayListListSerializable


答案 1

List不实现,因为它不是列表的关键要求。不能保证(或需要)可以序列化 a 的每个可能实现。SerializableList

LinkedList并选择这样做,但这是特定于其实施的。其他实现可能不是 。ArrayListListSerializable


答案 2

List 是一个接口,使其扩展为可序列化意味着 List 的任何实现都应该是可序列化的。

可序列化属性不是 List 抽象的一部分,因此不应成为实现所必需的。