2011-12-27 13 views
36

Nuevo en Java. Aprendiéndolo mientras trabajas en una aplicación de Android. Me estoy poniendo en práctica un comparador para ordenar una lista de los archivos y los documentos androide say que un comparador debe implementar Serializable:¿Por qué debería un Comparador implementar Serializable?

Se recomienda que un comparador implementa Serializable.

Esta es la interfaz Serializable here.

Solo quiero ordenar una lista de archivos. ¿Por qué debería implementar esto o cuál es la razón por la cual debería ser para cualquier Comparador?

+0

¿Por qué Android se preocuparía por la serialización en absoluto? – irreputable

+2

@irreputable: ¿Por qué no usarías la serialización en Android? – Thilo

Respuesta

47

Esto no es sólo una cosa de Android, el Java SDK has the same recommendation:

Nota: Es generalmente una buena idea para los comparadores a también implementan java.io.Serializable, ya que pueden ser utilizados como ordenando métodos en estructuras de datos serializables (como TreeSet, TreeMap). Para que la estructura de datos se serialice con éxito, el comparador (si se proporciona) debe implementar Serializable.

Así que la idea es que debido a que un TreeMap es serializable, y el TreeMap puede contener un Comparador, sería bueno si el Comparador también es serializable. Lo mismo aplica para todos los elementos en la colección.

Puede ignorar esto de manera segura a menos que use la serialización de esa manera.

9

Esto debería ayudar a salir: http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html

Nota: Es generalmente una buena idea para los comparadores para poner en práctica java.io.Serializable, ya que pueden ser utilizados como métodos de ordenar en estructuras de datos serializable (como TreeSet, TreeMap). Para que la estructura de datos se serialice con éxito, el comparador (si se proporciona) debe implementar Serializable.

8

Serializable es una interfaz en blanco. No contiene ningún método. Entonces, para implementarlo, todo lo que necesita decir es implements Serializable en una clase. No es una gran carga para ti. Si extiende Comparator, ni siquiera necesita implementar Serializable porque la súper clase hace eso por usted, y luego no necesita hacer nada para implementar Serializable.

Cuando algo implementa Serializable, eso significa que el objeto puede convertirse en una matriz de bytes a voluntad. Esto se usa para transmisión a través de Internet, almacenamiento en un archivo, etc. Hablando de forma muy aproximada, la forma en que la serialización funciona para un objeto, de forma predeterminada, es tomar cada objeto referenciado por el objeto que intenta serializar, convertir cada uno objeto en una matriz de bytes (es decir, invocar la serialización de forma recursiva), y concatenar las matrices de bytes para producir una matriz de bytes que representa el objeto general.

Ahora, ¿por qué debería un Comparator implementar Serializable? Digamos que desea serializar un TreeMap u otro orden Collection. El objetivo de la serialización es proporcionar una representación completa de un objeto.Las colecciones como TreeMap tienen un objeto Comparator, de modo que para poder generar una matriz de bytes que capture todos los aspectos de dichas colecciones, debe poder guardar el Comparator como un conjunto de bytes también. Por lo tanto, Comparator debe ser Serializable para que otras cosas se puedan serializar correctamente.

+3

"Si extiende el comparador": el comparador es una interfaz (y no se extiende a serializable). "para implementarlo, todo lo que necesitas decir es que implementa Serializable en una clase", también debes pensar si es lo correcto. por ejemplo, todos los campos de instancia también deben ser serializables (o debe tomar algunas medidas). – Thilo

0

que he visto en Java 5 API Link to java 5 APT que se afirma que mediante la implementación Comparador no significa implementar la interfaz Serializable de todos modos, por lo que uno tiene que pagar explícitamente la atención para conseguir Serializable de alguna clase Comparador habitualmente creado

3

Para serializar un objeto en Java, se deben cumplir ambas condiciones:

  1. La clase a la que pertenece la instancia debe implementar java.io.Serializable.
  2. Los miembros de la clase deben ser serializables. Si uno o más de los miembros no deben ser serializados, deben marcarse como transitorios.

Cuando cualquier estructura de datos utiliza un Comparador y desea que esa estructura de datos sea serializable, el punto 2 (mencionado anteriormente) obliga al comparador a implementar serializable.

Cuestiones relacionadas