Возможны ли аннотации Java с типизированным параметром класса? - PullRequest
11 голосов
/ 18 февраля 2010

Предположим, у меня есть этот интерфейс:

public interface MyInterface {
   void doStuff();
}

С конкретной реализацией:

public class HardCoreConcrete implements MyInterface {
   void doStuff() {
      // i really do stuff, honest
   }
}

И предположим, у меня есть эта аннотация:

@Target(ElementType.class)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
   Class<MyInterface> clazz;
}

Этобудет использоваться так:

@MyAnnotation(clazz = HardCoreConcrete.class)
public class SomeOtherClass {
...
}

Почему это не работает?Мой компилятор жалуется, что для clazz он ожидал типа MyInterface!Но HardCoreConcrete реализует MyInterface.

Я что-то не так делаю?Разве это не разрешено?Мне не повезло?

1 Ответ

23 голосов
/ 18 февраля 2010

Вам нужно

public @interface MyAnnotation {    
   Class<? extends MyInterface> clazz;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...