假设我有这个界面:
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。
我做错了吗?这是不允许的?我运气不好吗?
答案 0 :(得分:23)
你需要
public @interface MyAnnotation {
Class<? extends MyInterface> clazz;
}