求助一个Java基础问题


​​​​如上图,在使用自定义注解的过程中发现一个不太理解的现象,求大佬指教!getAnnotation方法返回一个A类型的结果,我在hh这个参数的引用明确指定了泛型为MyAnnotation,但是在后面调用getAnnotation时依旧需要强转,这让我非常困惑...另外我还发现使用Annotation引用去指向getAnnotation方法时不需要强转...

源代码下面附上

@MyAnnotation("heihei")
public class TestAnnotation {

    public void use(){
        Class clazz=TestAnnotation.class;
        Class<MyAnnotation> hh=MyAnnotation.class;
        
        try {
            Method method=clazz.getMethod("use");
            MyAnnotation an=(MyAnnotation) clazz.getAnnotation(hh);
            String vl=an.value();
            System.out.println(vl);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }


    }

    public static void main(String[] args) {
        TestAnnotation t= new TestAnnotation();
        t.use();
    }
}
阅读 1.6k
1 个回答

泛型的生效在于编译期,java代码运行时会对泛型进行擦除,所以前面指定的泛型类型并没有意义,仍需进行类型强转

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题