2008-09-28 14 views
18

No puedo encontrar un caso de uso para poder anotar interfaces en Java.Anotaciones en las interfaces?

Tal vez alguien podría darme un ejemplo?

+8

Es genial para cabrear al tipo de JavaScript que intenta comprender tu Java. –

Respuesta

20

Lo he utilizado en la primavera para anotar interfaces en las que la anotación se debe aplicar 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.

+0

Más específicamente es @Transactional, que puede aplicar a una clase Spring Bean, cualquiera de sus métodos, o la interfaz o los métodos de interfaz que la clase implementa, lo que tenga más sentido en ese momento. – skaffman

+3

@Alex No estoy seguro si he entendido mal su respuesta, pero de acuerdo con [esta pregunta] (http://stackoverflow.com/questions/4745798/why-java-classes-do-not-inherit-annotations-from-implemented- interfaces), las anotaciones no se heredan de las interfaces. ¿Quizás te estás refiriendo a anotar superclases en lugar de interfaces? –

1

Más un ejemplo, pero Local y Remote anotaciones en EJB3. Según el doc java,

Cuando se usa en una interfaz, designa que la interfaz como una interfaz local de negocios .

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

0

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

que tendría que comprobar para arriba en cómo funcionan las anotaciones en Java sin embargo, pero esto podría hacerse fácilmente con anotaciones Python ...

4

utilizo findbugs ampliamente. Creo que el uso de annotations 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 ...

1

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 dictan lo que puede hacer con ellos, no hay ninguna buena razón para no permitir a los usuarios anotar interfaces.

4

Incluso sin ejemplos, debe quedar claro para explicar - las interfaces de describir el comportamiento, y tú también anotaciones, lo que es una coincidencia lógica de ponerlos juntos.

0

Al desplegar aplicaciones bajo JBoss puede utilizar anotaciones en una interfaz para exportar un servicio en el jmx-consola.

0

lo he utilizado en la definición de una interfaz REST. RESTeasy le permite crear cliente REST que utiliza una interfaz anotado (RESTInterfaceV1 en este ejemplo):

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

Aunque las anotaciones tienen que ser duplicada en el objeto que realmente implementa la interfaz REST, la propia interfaz puede ser distribuido por separado a aquellos que quieren hacer un cliente Java REST.

0

me recuerda mis interfaces con @Immutable para indicar claramente a los desarrolladores de las subclases, que Mutabilidad contraen una clase que implementa la interfaz debería tener. Como gehel lo pone, programación por contrato.

4

Un caso de uso con el que estoy trabajando es la validación javax/hibernate de beans, estamos utilizando 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; 
    } 
    ... 
} 
Cuestiones relacionadas