Каковы допустимые варианты использования аннотаций?Примеры использования аннотаций
При проектировании в первую очередь систем конфигурации на основе аннотаций мне иногда нужно создавать классы, которые реализуют аннотации для генерации кода или программной конфигурации.
Альтернатива включает зеркальное отображение данных, содержащихся в аннотациях, в DTO, что кажется накладными расходами.
Вот пример:
public enum IDType {
LOCAL,
URI,
RESOURCE;
}
@Documented
@Target({ METHOD, FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Id {
/**
* @return
*/
IDType value() default IDType.LOCAL;
}
с реализацией
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;
}
}
я получаю предупреждение компилятора для этого, но это, кажется, является действительным инструментом для многих случаев применения.
Предупреждение о приведенном выше примере
Тип аннотаций Id не следует использовать в качестве суперинтерфейса для IdImpl
Отредактировано:
Я только что нашел этот пример из Guice :
bind(CreditCardProcessor.class)
.annotatedWith(Names.named("Checkout"))
.to(CheckoutCreditCardProcessor.class);
См. Это Javadoc from Names.
У кого-нибудь есть информация, почему это ограничение существует или имеет некоторые другие случаи использования?
Какие предупреждения вы получаете? – djna
@djina: Да, один пенни за каждый раз, когда вы должны это сказать, и вы были бы богаты. Меня никогда не перестает удивлять. – musiKk
Может быть, это только я, но, похоже, он тесно связан с этим вопросом: http: // stackoverflow.com/questions/1624084/why-is-not-possible-to-extend-annotations-in-java –