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

Swa*_*rma 34 java collections inheritance serialization list

那为什么java.util.List没有实现Serializable,而像子类LinkedList,Arraylist怎么办?它似乎不是违反继承原则吗?例如,如果我们想通过网络发送Linkedlist,我们必须写:

new ObjectOutputStream(some inputStream).writeObject(some LinkedList);
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都那么好,但在阅读另一方面的对象时,我们必须明确地说LinkedList l = (LinkedList)objectInputStream.readObject();而不是List l = (List)objectInputStream.readObject();.如果我们曾经更改编辑功能,从LinkedList地说ArrayList,我们也将不得不改变阅读部分.拥有List工具Serializable可以解决问题.

Aar*_*ron 40

List没有实现,Serializable因为它不是列表的关键要求.无法保证(或需要)List可以序列化每个可能的a实现.

LinkedListArrayList选择这样做,但这是特定于他们的实施.其他List实现可能不是Serializable.

  • 强制列表的所有实现都是可序列化的,并且选择一个特定的实现是可序列化的. (13认同)
  • 在这种情况下,相同的参数可以应用于LinkedList以及作为一个非常基本的列表,它不可序列化,因为它不是列表的要求. (2认同)

Dun*_*ril 8

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

serializable属性不是List抽象的一部分,因此不应该是实现所必需的.