为什么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 getAnnotation(Class annotationClass);
由于Resource.class是Class类型,在我看来这意味着cls.getAnnotation(Resource.class)应该返回类型Resource,我应该需要强制转换。
我发现使用getAnnotation的所有示例都没有强制转换,所以我一定做错了。
cls
的类型是什么? 是原始Class
还是Class
?
如果它是原始类型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 cls3 = Example.class; Resource anno = cls3.getAnnotation(Resource.class); // OK