Позвольте нам, предположил, что у меня есть этот интерфейс:
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.
Я делаю что-то не так? Разве это не позволяется? Я не повезло?
Вам потребуется
public @interface MyAnnotation {
Class<? extends MyInterface> clazz;
}