为什么Class.getAnnotation()要求我进行强制转换?

我正在使用Java 1.6.0_25。

我定义了一个注释:

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

public @interface Resource {

String value();

}

后来当我使用getAnnotation时:

Resource resource = (Resource)cls.getAnnotation(Resource.class);

编译器和IDE同意我必须强制转换结果,但是getAnnotation在Java 1.5文档中声明为:

public <A extends Annotation> A getAnnotation(Class<A> annotationClass);

由于Resource.class是Class类型,在我看来,这意味着cls.getAnnotation(Resource.class)应该返回Resource类型,并且我需要进行强制转换。

我使用getAnnotation找到的所有示例都没有强制转换,因此我必须做错了什么。

回答:

什么是cls?是生的Class还是生的Class<Something>

如果是原始类型Class,则必须进行强制转换。如果您至少制作了,Class<?>而不是Class,则不再需要演员表。

Class cls = Example.class;

// Error: Type mismatch, cannot convert from Annotation to Resource

Resource anno = cls.getAnnotation(Resource.class);

Class<?> cls2 = Example.class;

Resource anno = cls2.getAnnotation(Resource.class); // OK

Class<Example> cls3 = Example.class;

Resource anno = cls3.getAnnotation(Resource.class); // OK

以上是 为什么Class.getAnnotation()要求我进行强制转换? 的全部内容, 来源链接: utcz.com/qa/426482.html

回到顶部