¿Cuáles son casos de uso válidos para implementar anotaciones?Casos de uso para implementar anotaciones
Al diseñar principalmente sistemas de configuración basados en anotaciones, ocasionalmente necesito crear clases que implementen anotaciones para la generación de código o la configuración programática.
La alternativa consiste en duplicar los datos contenidos en las anotaciones en DTO, lo que parece una sobrecarga.
Aquí se muestra un ejemplo:
public enum IDType {
LOCAL,
URI,
RESOURCE;
}
@Documented
@Target({ METHOD, FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Id {
/**
* @return
*/
IDType value() default IDType.LOCAL;
}
con la implementación
public class IdImpl implements Id{
private final IDType idType;
public IdImpl(IDType idType){
this.idType = idType;
}
@Override
public IDType value() {
return idType;
}
@Override
public Class<? extends Annotation> annotationType() {
return Id.class;
}
}
consigo las advertencias del compilador para esto, pero parece ser una herramienta válida para muchos casos de uso.
La advertencia para el ejemplo anterior es
El tipo de anotación Id no debe ser utiliza como superinterfaz para IdImpl
Editado:
I acaba de encontrar este ejemplo de Guice :
bind(CreditCardProcessor.class)
.annotatedWith(Names.named("Checkout"))
.to(CheckoutCreditCardProcessor.class);
Vea esto Javadoc from Names.
¿Alguien tiene alguna información sobre por qué existe esta restricción o tiene otros casos de uso en mente?
¿Qué advertencias tienes? – djna
@djina: Sí, un centavo por cada vez que tienes que decir eso y serás rico. Nunca deja de sorprenderme. – musiKk
Quizás sea solo yo, pero parece estar estrechamente relacionado con esta pregunta: http: // stackoverflow.com/questions/1624084/why-is-not-possible-to-extend-annotations-in-java –