2010-01-13 9 views
5

Esto está relacionado con el uso de anotaciones en Java. Asocié una anotación con un método mientras lo declaraba en la interfaz. Durante la implementación, ¿cómo puedo asegurarme de que la anotación se lleve junto con la anotación @Override y, de lo contrario, arrojará un error de compilación?Si una anotación está asociada con un método al declararlo en una interfaz, ¿podemos forzar la presencia de una anotación en la clase de implementación?

Gracias.

Respuesta

1

No puede.

tiene que escribir algo de código para hacer esto (ya sea en el tiempo de carga applciation, o el uso de apt)

que tenían el mismo escenario, y crearon una anotación de mi propia:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.ANNOTATION_TYPE) 
public @interface DependsOn { 
    Class<? extends Annotation>[] value(); 

    /** 
    * Specifies whether all dependencies are required (default), 
    * or any one of them suffices 
    */ 
    boolean all() default true; 
} 

y lo aplicó a otras anotaciones, como:

@Retention(value = RetentionPolicy.RUNTIME) 
@Target(value = ElementType.TYPE) 
@DependsOn(value={Override.class}) 
public @interface CustomAnnotation { 
} 

Imporant: tener en cuenta que @Override tiene un tiempo de compilación (SOURCE) política de retención, es decir, no está disponible en tiempo de ejecución.

1

No se puede aplicar esto en el compilador, no. El trabajo de las herramientas que utilizan esas anotaciones es verificar todas las superclases e interfaces al buscar anotaciones en una clase determinada.

Por ejemplo, Spring AnnotationsUtils toma una clase para buscar anotaciones y rastrea todo su árbol de herencia buscándolas, porque el compilador y JVM no lo hacen por usted.

+0

Gracias skaffman. – Vikdor

Cuestiones relacionadas