2010-12-27 3 views

Respuesta

21

Una interfaz de marcador no "funciona" como tal. Como su nombre lo indica, simplemente marca una clase como de un tipo particular. Algún otro código tiene que verificar la existencia del marcador y hacer algo basado en esa información.

En la actualidad, las anotaciones suelen cumplir la misma función que las interfaces de marcador anteriormente.

+0

Hola Dan, solo corrígeme si mi entendimiento es incorrecto. Como el nombre dice "marcador", significa que tan pronto como una clase implemente una interfaz de marcador, se implica que en tiempo de ejecución JVM usará algún mecanismo para identificar esta clase como marcada para implementar la interfaz como clonable. – Kamal

+0

@ Dan, ya que le dijo '" Algún otro código tiene que verificar la existencia del marcador y hacer algo en función de esa información "., ¿Podría proporcionar un ejemplo/escenario para el mismo, – Deepak

+1

@Kamal No, a la interfaz de marcador no tiene un significado especial para la JVM, y por sí misma no da lugar a ninguna funcionalidad adicional. En el caso de Cloneable, simplemente le dice a otro código que el desarrollador de esta clase garantiza que las instancias son correctamente clonables. Se puede decir que clonable es un buen ejemplo de una interfaz de marcador mal utilizada.La interfaz realmente debería hacer cumplir la provisión de un método público de clonación. –

21

La única cosa útil que puede hacer con él es

if (instance instanceof MyMarkerInterface) { 
    ... 
} 
6

interfaces de marcador puede ser reemplazado con anotaciones en muchos lugares, sin embargo, una interfaz de marcadores se pueden seguir utilizando para

  • La compilación verificaciones de tiempo Puede tener un método que debe tomar un objeto de una clase con una (s) interfaz (es) marcadora (s) determinada (s), p.

    public void myMethod(MyMarkerInterface MMI); 
    

No se puede tener este compilar cheque vez utilizando una anotación solo.

BTW: Puede tener dos interfaces utilizando genéricos, pero los buenos ejemplos son raros.

  • Compatibilidad con los marcos que dependen de la (s) interfaz (es) para identificar un tipo de componente. como OSGi.

EDITAR: Uso esto para una interfaz de marcador de escucha. Un oyente tiene métodos de métodos marcados con anotaciones, pero los métodos pueden tener cualquier nombre o tipo. Agrega una verificación de tiempo del compilador a lo que de otro modo sería un enlace puramente en tiempo de ejecución.

public Component implements Listener { 

@ListenerCallback 
public void onEventOne(EventOne... eventOneBatch) { } 

@ListenerCallback 
public void onEventTwo(EventTwo eventTwo) { } 
} 
+3

Su 'myMethod' es más o menos inútil, porque ¿qué se puede hacer con una interfaz * de marcador * que no tiene más métodos que' Objeto'? – Mot

+0

@MikeL. Mire la documentación de 'java.lang.Cloneable' y' java.util.RandomAccess' para ejemplos "buenos" (_good_ como en _He hecho esto antes de que se introduzcan las anotaciones_). – Feuermurmel

+0

@Feuermurmel No consideraría que Cloneable es un buen ejemplo de una interfaz de marcador, ya que no está claro por qué no tiene un método 'público Object clone()'. –

0

Una interfaz de marcador le dice a JVM que la clase está marcada por una interfaz de marcador para agregar la funcionalidad de una interfaz de marcador. Al igual que la implementación, Cloneable le dice a JVM que esta clase implementa Cloneable y, por lo tanto, JVM tendrá que copiarla bit-wise.

1

La interfaz de marcador en Java es interfaces sin campo o métodos o en la interfaz de texto simple palabra vacía en java se llama interfaz marcador. p.ej. Interfaz serializable, Clonable y remota. Se utilizan para indicar señal o comando al compilador o JVM. También se puede usar para clasificar el código. También puede escribir su propia interfaz de marcador y usarla para dividir lógicamente su código. Además, puede escribir cualquier operación de preproceso en esa clase.

Cuestiones relacionadas