¿Cómo serializar una lista en java?

81

Me gustaría clonar una lista en profundidad. para eso estamos teniendo un método

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

así que ahora, para clonar mi Lista, debería convertirla en serializable primero. ¿Es posible convertir una lista en una lista serializable?

Rakesh Juyal
fuente

Respuestas:

162

Todas las implementaciones estándar de java.util.Listya se implementan java.io.Serializable.

Entonces, aunque en java.util.Listsí mismo no es un subtipo de java.io.Serializable, debería ser seguro enviar la lista a Serializable, siempre que sepa que es una de las implementaciones estándar como ArrayListo LinkedList.

Si no está seguro, primero copie la lista (usando algo como new ArrayList(myList)), entonces sabrá que es serializable.

skaffman
fuente
1
¿Por qué alguien querría lanzar algo a Serializable? Serializable es solo una interfaz de marcador; enviar algo a Serializable no es útil.
Jesper
19
Porque SerializationUtils.clone()requiere un argumento de tipo Serializable, por lo que si su variable es de tipo List, deberá convertirla.
skaffman
2
@Jesper: Es una interfaz de marcador que dice que es seguro serializar la clase. Android usa la interfaz serializable para muchas cosas; transmitir extras de intención, preferencias compartidas, etc.
Zack Marrapese
11
Sí, encontré esta pregunta al buscar soluciones de Android. Mi adición es, List<MyClass> myObjs = new ArrayList<MyClass>();no cumple con el Serializable, pero lo ArrayList<MyClass> myObjs = new ArrayList<MyClass>();hace.
Evi Song
2
@Adam Podría ser mejor garantizar la seguridad en tiempo de compilación utilizando la firma <T extends List<Foo> & Serializable> setFooList(T list), lo que requiere que la persona que llama le pase una instancia de alguna implementación de List que también sea serializable.
Theodore Murdock
32

Como ya se señaló, la mayoría de las implementaciones estándar de Listson serializables. Sin embargo, debe asegurarse de que los objetos referenciados / contenidos dentro de la lista también sean serializables.

Brian Agnew
fuente
1
Como ya se señaló, Listes una interfaz que no se extiende Serializableni ninguna interfaz que lo haga. ListLos s que no son serializables pueden no ser comunes en las bibliotecas estándar, pero eso no hace que la primera oración sea correcta.
arne.b
13

List es solo una interfaz. La pregunta es: ¿se puede serializar su implementación de List real ? Hablando de las implementaciones estándar de List ( ArrayList , LinkedList ) del tiempo de ejecución de Java, la mayoría de ellas ya lo están.

Puñal
fuente