Jak serializować listę w Javie?


81

Chciałbym głęboko sklonować listę. dlatego mamy metodę

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

więc teraz, aby sklonować moją listę, powinienem najpierw przekonwertować ją na serializowalny. Czy można przekonwertować listę na listę serializowalną?

Odpowiedzi:


166

Wszystkie standardowe implementacje java.util.Listjuż wdrożone java.io.Serializable.

Więc nawet jeśli java.util.Listsam nie jest podtypem java.io.Serializable, rzutowanie listy powinno być bezpieczne Serializable, o ile wiesz, że jest to jedna ze standardowych implementacji, takich jak ArrayListlub LinkedList.

Jeśli nie masz pewności, najpierw skopiuj listę (używając czegoś podobnego new ArrayList(myList)), wtedy wiesz, że można ją serializować.


1
Dlaczego ktoś miałby kiedykolwiek chcieć przesłać cokolwiek do Serializable? Serializable to tylko interfejs znacznika; przesyłanie czegoś do Serializable nie jest przydatne.
Jesper,

19
Ponieważ SerializationUtils.clone()wymaga argumentu typu Serializable, więc jeśli twoja zmienna jest typu List, musisz ją rzucić.
skaffman

2
@Jesper: To interfejs znaczników, który mówi, że serializowanie klasy jest bezpieczne. Android używa interfejsu Serializable do wielu rzeczy; przekazywanie intencjonalnych dodatków, wspólnych preferencji itp.
Zack Marrapese

11
Tak, znalazłem to pytanie podczas wyszukiwania rozwiązań na Androida. Mój dodatek List<MyClass> myObjs = new ArrayList<MyClass>();nie spełnia Serializable, ale ArrayList<MyClass> myObjs = new ArrayList<MyClass>();spełnia.
Evi Song

2
@Adam Lepiej byłoby zagwarantować bezpieczeństwo w czasie kompilacji, zamiast tego używając podpisu <T extends List<Foo> & Serializable> setFooList(T list), który wymaga, aby wywołujący przekazał Ci wystąpienie implementacji listy, która jest również możliwa do serializacji.
Theodore Murdock

32

Jak już wspomniano, większość standardowych implementacji Listmożna serializować. Należy jednak upewnić się, że obiekty, do których istnieją odwołania / zawarte na liście, są również możliwe do serializacji.


1
Jak już wspomniano, Listjest to interfejs, który się nie rozszerza Serializablelub jakikolwiek interfejs, który to robi. ListPliki, których nie można serializować, mogą nie być powszechne w standardowych bibliotekach, ale to nie oznacza, że ​​pierwsze zdanie jest prawidłowe.
arne.b

14

Lista to tylko interfejs. Pytanie brzmi: czy rzeczywista implementacja listy jest możliwa do serializacji? Mówiąc o standardowych implementacjach list ( ArrayList , LinkedList ) ze środowiska wykonawczego Java, większość z nich już jest.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.