是否可以使用带类型类参数的java注释?

时间:2010-02-18 09:44:47

标签: java annotations

假设我有这个界面:

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 个答案:

答案 0 :(得分:23)

你需要

public @interface MyAnnotation {    
   Class<? extends MyInterface> clazz;
}