Як серіалізувати список у Java?


81

Я хотів би глибоко клонувати список. для цього ми маємо метод

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

так що тепер, щоб клонувати мій список, я повинен перетворити його на серіалізується спочатку. Чи можна перетворити список у серіалізований список?

Відповіді:


166

Усі стандартні реалізації java.util.Listвже реалізовані java.io.Serializable.

Отже, хоча java.util.Listсам по собі не є підтипом java.io.Serializable, він повинен бути безпечним для складання списку Serializable, якщо ви знаєте, що це одна із стандартних реалізацій, таких як ArrayListor LinkedList.

Якщо ви не впевнені, спершу скопіюйте список (використовуючи щось на зразок new ArrayList(myList)), тоді ви знаєте, що його можна серіалізувати.


1
Чому хтось коли-небудь захоче кинути щось на Серіалізуване? Серіалізація - це лише інтерфейс маркера; кидати щось на серіалізацію не корисно.
Jesper

19
Оскільки SerializationUtils.clone()потрібен аргумент типу Serializable, і тому, якщо ваша змінна має тип List, вам потрібно буде її привести.
skaffman

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), який вимагає, щоб ваш абонент передав вам екземпляр якоїсь реалізації списку, яка також може серіалізуватися.
Теодор Мердок

32

Як уже зазначалося, більшість стандартних реалізацій Listможна серіалізувати. Однак ви повинні переконатися, що об'єкти, на які посилаються / містяться в списку, також можуть серіалізуватися.


1
Як уже зазначалося, Listце інтерфейс, який не розширюється, Serializableабо будь-який інтерфейс, який це робить. Lists, які не можна серіалізувати, можуть бути не звичайними у стандартних бібліотеках, але це не робить правильним перше речення.
arne.b

14

Список - це просто інтерфейс. Питання в тому: чи можна здійснити серіалізацію вашої фактичної реалізації Списку ? Говорячи про стандартні реалізації списку ( ArrayList , LinkedList ) із часу виконання Java, більшість із них насправді вже є.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.