with tutorial repeatable define crear annotation java annotations

java - tutorial - Anotaciones en interfaces?



java lang annotation tutorial (10)

No puedo imaginar un caso de uso para poder anotar interfaces en Java.

¿Tal vez alguien más inteligente que yo podría darme un ejemplo?


Al implementar aplicaciones en JBoss, puede usar anotaciones en una interfaz para exportar un servicio en la consola jmx.


He visto muchas herramientas de investigación usar anotaciones de métodos para permitir a los usuarios especificar protocolos, restricciones, etc. para facilitar la verificación automática más adelante.

Dado que las anotaciones no determinan qué puede hacer con ellas, no hay una buena razón para no permitir que los usuarios anoten las interfaces.


Incluso sin ejemplos, debe ser claro explicar: las interfaces describen el comportamiento, y también las anotaciones, por lo que es una coincidencia lógica para unirlas.


Lo he usado al definir una interfaz REST. RESTeasy le permite crear un cliente REST que utiliza una interfaz anotada (RESTInterfaceV1 en este ejemplo):

final RESTInterfaceV1 client = ProxyFactory.create(RESTInterfaceV1.class, "http://localhost:8080/rest");

Aunque las anotaciones tienen que duplicarse en el objeto que realmente implementa la interfaz REST, la interfaz en sí misma se puede distribuir por separado a aquellos que desean crear un cliente REST Java.


Lo he usado en Spring para anotar interfaces donde la anotación debe aplicarse a todas las subclases. Por ejemplo, supongamos que tiene una interfaz de servicio y puede tener varias implementaciones de la interfaz, pero desea que se aplique una anotación de seguridad independientemente de la anotación. En ese caso, tiene más sentido anotar la interfaz.


Más un ejemplo, pero las anotaciones locales y remotas en EJB3. De acuerdo con el documento de Java,

Cuando se utiliza en una interfaz, designa esa interfaz como una interfaz comercial local.

Supongo que el caso de uso aquí es que la interfaz tiene una función especial mejor indicada por una anotación.


Marqué mis interfaces con @Immutable para indicar claramente a los desarrolladores de las subclases que Mutability debe contratar una clase que implementa la interfaz. Como gehel lo pone, programación por contrato.


Puede usarlo para la programación de estilo de contrato: vaya un paso más allá de simplemente definir la interfaz (tipos y nombres de métodos) y también definir algunas semánticas (contenido de los tipos, condiciones previas, condiciones posteriores).

Tendría que comprobar cómo funcionan las anotaciones en Java, pero esto podría hacerse fácilmente con las anotaciones de Python ...


Un caso de uso con el que estoy trabajando es la validación de bean javax / hibernate, estamos usando interfaces para ayudarnos a evitar la definición de validaciones en cada clase específica.

public interface IUser { @NotNull Long getUserId(); ... } public class WebUser implements IUser { private Long userId; @Override public Long getUserId(){ return userId; } ... }


Yo uso findbugs extensivamente. Considero que el uso de anotaciones para especificar restricciones de nulidad es muy útil. Incluso si no usas findbugs, hace que la intención del código sea mucho más clara. Esas anotaciones tienen su lugar tanto en Interfaces como en Clases. Se podría argumentar que es una especie de programación por contrato ...