Javaでリストをシリアル化する方法は?


81

リストのクローンを作成したいと思います。そのために私たちは方法を持っています

// apache commons method. This object should be serializable
SerializationUtils.clone ( object ) 

したがって、リストのクローンを作成するには、最初にそれをシリアル化可能に変換する必要があります。リストをシリアル化可能なリストに変換することは可能ですか?

回答:


166

のすべての標準実装はjava.util.Listすでに実装されていますjava.io.Serializable

したがって、java.util.Listそれ自体はのサブタイプではありませんが、またはのような標準実装の1つであることがわかっている限りjava.io.Serializable、リストをにキャストしても安全Serializableです。ArrayListLinkedList

よくわからない場合は、最初にリストをコピーして(のようなものを使用してnew ArrayList(myList))、シリアル化可能であることがわかります。


1
なぜ誰かがSerializableに何かをキャストしたいと思うのでしょうか?Serializableは単なるマーカーインターフェイスです。Serializableに何かをキャストすることは役に立ちません。
ジェスパー

19
SerializationUtils.clone()Serializableに引数が必要であるため、変数が型のList場合は、それをキャストする必要があります。
skaffman 2009

2
@Jesper:クラスをシリアル化しても安全だと言うマーカーインターフェイスです。Androidは多くの目的でSerializableインターフェースを使用しています。インテントエクストラ、共有設定などを
渡す

11
はい、Androidソリューションを検索したときにこの質問を見つけました。私のほかには、あるList<MyClass> myObjs = new ArrayList<MyClass>();満たしていませんSerializableが、ArrayList<MyClass> myObjs = new ArrayList<MyClass>();ありません。
Evi Song

2
@Adam署名を使用する代わりに、コンパイル時に安全性を保証するのが最善かもしれません。これにより<T extends List<Foo> & Serializable> setFooList(T list)、呼び出し元は、シリアル化可能なリスト実装のインスタンスを渡す必要があります。
セオドアマードック2015

32

すでに指摘したように、のほとんどの標準実装Listはシリアライズ可能です。ただし、リスト内で参照/含まれているオブジェクトシリアル化可能であることを確認する必要があります。


1
すでに指摘したように、List拡張しないSerializableインターフェイス、または拡張するインターフェイスです。Listシリアル化できないsは、標準ライブラリでは一般的ではないかもしれませんが、それでは最初の文が正しくなりません。
arne.b 2012

14

リストは単なるインターフェースです。問題は、実際のリストの実装はシリアライズ可能ですか?Javaランタイムからの標準のList実装(ArrayListLinkedList)について言えば、それらのほとんどは実際にはすでに存在しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.