Soy consciente de qué interfaz de marcador es y cuándo debemos usarlo. Una pregunta aún no está clara para mí. Si una interfaz de marcador no tiene ningún método o cuerpo, ¿cómo funciona en tiempo de ejecución?Si una interfaz de marcador no tiene ningún método, ¿cómo funciona?
Respuesta
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.
La única cosa útil que puede hacer con él es
if (instance instanceof MyMarkerInterface) {
...
}
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) { }
}
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
@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
@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()'. –
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.
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.
- 1. ¿Por qué el iterador no tiene ningún método de reinicio?
- 2. Uncaught TypeError: Object [objeto Object] no tiene ningún método 'apply'
- 3. TypeError HTMLSpanElement tiene ningún método 'html'
- 4. jQuery Tránsito: Objeto no tiene ningún método 'setFromString'
- 5. ¿Cómo puedo saber si un proceso tiene una interfaz gráfica?
- 6. ¿Cómo escribir nuestra propia interfaz de marcador en Java?
- 7. Compruebe si una clase tiene un método
- 8. Obtener Intellisense en la interfaz que implementa un método si ese método no tiene sus propios comentarios XML
- 9. objeto no tiene ningún atributo 'guardar' Django
- 10. Establecer NSFileCreationDate no tiene ningún efecto
- 11. Cómo encontrar si un método está implementando una interfaz específica
- 12. ¿Puede la clase ser abstracta incluso si no tiene ningún método abstracto? Si es así, ¿cuál es el uso?
- 13. less.js tiene ningún método 'toCSS' en el reloj
- 14. Configuración de cell.ReadOnly no tiene ningún efecto
- 15. Android: método de vibrador (si el teléfono no tiene vibrador?)
- 16. VIM textwidth no tiene ningún efecto
- 17. ¡El proyecto no tiene ningún archivo default.properties!
- 18. ¿Cómo se ordena mediante un método de modelo personalizado que no tiene ningún atributo en SQL?
- 19. Método devolver una interfaz
- 20. ¿Cómo determinar si una cadena tiene caracteres no alfanuméricos?
- 21. ¿Cerrar un ByteArrayOutputStream no tiene ningún efecto?
- 22. std no tiene ningún miembro 'getline'?
- 23. Python PIL no tiene ningún atributo 'Imagen'
- 24. shell interactivo php no tiene ningún resultado?
- 25. NSAttributedString kCTParagraphStyleSpecifierParagraphSpacing no tiene ningún efecto
- 26. Una línea si la declaración no funciona
- 27. # Objeto <HTMLDivElement> tiene ningún método 'setCapture'
- 28. Clases burlonas que no tienen interfaz e incluso ningún método virtual
- 29. iphone - ¿cómo puedo comprobar si NSMutableArray ObjectAtIndex no tiene ningún valor
- 30. Si un método devuelve una interfaz, ¿qué significa?
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
@ 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
@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. –