¿Cuál es el uso de las interfaces de marcador en Java?

Cuando no hay nada para implementar en las interfaces de marcadores como Serializable. . ¿De qué sirve implementarlo?

En versiones anteriores de Java, las interfaces de marcador eran la única forma de declarar metadatos sobre una clase. Por ejemplo, la interfaz de marcador serializable le permite al autor de una clase decir que su clase se comportará correctamente cuando se serialice y se deserialice.

En Java moderno, las interfaces de marcador no tienen cabida. Se pueden reemplazar completamente por Anotaciones , que permiten una capacidad de metadatos muy flexible. Si tiene información sobre una clase y esa información nunca cambia, las anotaciones son una forma muy útil de representarla.

Joshua Bloch: Effective Java 2nd Edition, p 179

Ítem ​​37: Usar interfaces de marcador para definir tipos

… Es posible que escuche decir que las anotaciones de marcadores (Ítem 35) hacen obsoletas las interfaces de marcadores. Esta afirmación es incorrecta. Las interfaces de marcador tienen dos ventajas sobre las anotaciones de marcador. En primer lugar, las interfaces de marcador definen un tipo que se implementa mediante instancias de la clase marcada; las anotaciones de marcador no. La existencia de este tipo le permite detectar errores en tiempo de comstackción que no podría detectar hasta el tiempo de ejecución si utilizó una anotación de marcador ….

Personalmente, creo que me inclinaré ante el conocimiento superior de Joshua sobre este tema.

Dichas interfaces de marcador son útiles en el caso de que otro código tome decisiones dependiendo de si un objeto implementa alguna interfaz de marcador.

En el caso de Serializable , la reflexión se usará para serializar los campos de los objetos.

Ahora se prefieren las anotaciones ya que no se propagan a las subclases.

Ver patrón de interfaz Marker .

Indica que la clase (y, en consecuencia, todos los campos que no son transitorios) son candidatos para la serialización. Y si está construyendo un marco que depende de la serialización, puede, por supuesto, escribir un método así:

 public void registerObject(Serializable obj); 

para limitar las clases que estás preparado para aceptar

Debido a que un objeto serializado necesita mantener la compatibilidad entre los sistemas, la serialización es una decisión de diseño explícita y, por lo tanto, requiere el uso de la interfaz de marcador para identificar dichos candidatos.

También hay un aspecto de seguridad. No desea que todo sea serializable; de ​​lo contrario, puede exponer accidentalmente (por ejemplo) contraseñas u otros datos confidenciales a través de la serialización.

Si implementa una interfaz, instanceof será verdadera. Si su interfaz no tiene nada que implementar, puede usar esto para marcar una clase con metadatos como las anotaciones para Java 1.5 y posteriores sin tener que forzar al implementador a hacer algo especial.

Se llaman interfaces de marcador . Y como su nombre lo indica, marcan que algún objeto está disponible para cierto tipo de operaciones.

Serializable significa que el objeto es elegible para la serialización de java, por ejemplo.

Se ha discutido si no deberían reemplazarse por anotaciones, ya que sus funciones son bastante similares.

Tiene razón al razonar que una interfaz vacía no afecta la ejecución “estándar” del progtwig que se basa en la inspección / mutación de campos y el envío de métodos.

Sin embargo, la interfaz de marcador es útil cuando se usa junto con la reflexión: una biblioteca / método inspecciona (a través de la reflexión) un objeto y funciona de manera diferente si su clase implementa la interfaz del marcador. A partir de Java5, hay muy poca necesidad de interfaces de marcadores: la misma función de “marcado” se puede lograr a través de anotaciones Java, que (una vez más) la mayoría de sus efectos se lograrán a través del código basado en la reflexión.

El objective principal es decirle al comstackdor que trate de manera diferente el objeto de la clase que implementó la interfaz del marcador.

Al observar detenidamente la interfaz del marcador en Java, por ejemplo, Serializable, Clonable y Remote, parece que se utilizan para indicar algo al comstackdor o JVM. Entonces, si JVM ve que una Clase es Serializable, realizó alguna operación especial en ella, de manera similar si JVM ve que una Clase es implementar Clonnable, realiza alguna operación para admitir la clonación. Lo mismo es cierto para RMI y la interfaz remota. En resumen, la interfaz Marker indica, señaliza o ordena a Compiler o JVM.

Leer más: http://javarevisited.blogspot.com/2012/01/what-is-marker-interfaces-in-java-and.html#ixzz2v6fIh1rw