有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么是类。getAnnotation()要求我进行演员阵容?

我使用的是Java 1.6.025

我定义了一个注释:

@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);

因为资源。类是类的类型,在我看来,这意味着cls。getAnnotation(Resource.class)应该返回Resource类型,我应该需要强制转换

我发现的所有使用getAnnotation的示例都没有类型转换,所以我一定是做错了什么


共 (1) 个答案

  1. # 1 楼答案

    什么是cls的类型?它是原始的还是原始的

    如果是原始类型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