björn
Nuevo en Java. Aprenderlo mientras se trabaja en una aplicación de Android. Estoy implementando un comparador para ordenar una lista de archivos y los documentos de Android decir que un Comparador debe implementar Serializable:
Se recomienda que un Comparator implemente Serializable.
Esta es la interfaz serializable aquí.
Solo quiero ordenar una lista de archivos. ¿Por qué debería implementar esto o cuál es la razón por la que debería ser para cualquier Comparador?
Esto no es solo una cosa de Android, el Java SDK tiene la misma recomendación:
Nota: en general, es una buena idea que los comparadores también implementen java.io.Serializable, ya que pueden usarse como métodos de ordenación en estructuras de datos serializables (como TreeSet, TreeMap). Para que la estructura de datos se serialice correctamente, el comparador (si se proporciona) debe implementar Serializable.
Entonces, la idea es que debido a que un TreeMap es serializable y el TreeMap puede contener un Comparator, sería bueno que el Comparator también sea serializable. Lo mismo se aplica a todos los elementos de la colección.
Puede ignorar esto con seguridad a menos que use la serialización de esa manera.
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 te extiendes Comparator
ni siquiera necesita implementar Serializable
porque la superclase hace eso por ti, y luego no necesitas hacer nada para implementar Serializable
.
Cuando algo implementa Serializable
, eso significa que el objeto se puede convertir en una matriz de bytes a voluntad. Esto se utiliza para la transmisión a través de Internet, el almacenamiento en un archivo, etc. Hablando en términos generales, la forma en que funciona la serialización para un objeto, de manera predeterminada, es tomar cada objeto al que hace referencia el objeto que está tratando de serializar, convertir cada uno de ellos objeto en una matriz de bytes (es decir, invoque la serialización recursivamente) y concatene las matrices de bytes para producir una matriz de bytes que represente el objeto general.
Ahora bien, ¿por qué un Comparator
implementar Serializable
? Digamos que desea serializar un TreeMap
o algún otro pedido Collection
. El objetivo de la serialización es proporcionar una representación completa de un objeto. Colecciones como TreeMap
tener un Comparator
objeto en ellos, por lo que para poder producir una matriz de bytes que capture todos los aspectos de tales colecciones, debe poder guardar el Comparator
como una matriz de bytes también. Por eso, Comparator
necesita ser Serializable
para que otras cosas puedan serializarse correctamente.
-
“Si extiende Comparator”: Comparator es una interfaz (y no extiende Serializable). “para implementarlo, todo lo que necesita decir es implementa Serializable en una clase”, también debe pensar si eso es lo correcto. por ejemplo, todos los campos de instancia también deben ser serializables (o debe tomar algunas medidas).
– Thilo
27 de diciembre de 2011 a las 7:36
Anuj Arora
Esto debería ayudarte: http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html
Nota: por lo general, es una buena idea que los comparadores implementen java.io.Serializable, ya que pueden usarse como métodos de ordenación en estructuras de datos serializables (como TreeSet, TreeMap). Para que la estructura de datos se serialice correctamente, el comparador (si se proporciona) debe implementar Serializable.
Para serializar un objeto en Java, se deben cumplir estas dos condiciones:
- La clase a la que pertenece la instancia debe implementar java.io.Serializable.
- Los miembros de la clase deben ser serializables. Si uno o más de los miembros no se van a serializar, deben marcarse como transitorios.
Cuando cualquier estructura de datos usa un comparador y desea que esa estructura de datos sea serializable, el punto 2 (mencionado anteriormente) obliga al comparador a implementar serializable.
he visto en Java 5 API
Enlace a Java 5 APT
que indicó que al implementar Comparator no significa implementar la interfaz Serializable de todos modos, por lo que uno debe prestar atención explícitamente para obtener Serializable en alguna clase de Comparator creada habitualmente
¿Por qué a Android le importaría la serialización?
– irreputable
27 de diciembre de 2011 a las 7:27
@irreputable: ¿Por qué no usarías la serialización en Android?
– Thilo
27 de diciembre de 2011 a las 7:38