可以使用类型化类参数的 java 注释吗?

2022-09-03 17:57:41

假设我有这个接口:

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

你需要

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

答案 2

推荐