日期:2014-05-20  浏览次数:20754 次

Class
Java code
import java.lang.reflect.*;
public class Test {
    public static void main(String[] args) {
        Class c=null;
        try {
            c=Class.forName("day16.Student");
            Method[] m=c.getDeclaredMethods();
            for(int i=0;i<m.length;i++){
                author ann=m[i].getAnnotation(Class.forName("author"));
                System.out.println(m[i].getName()+":"+ann.value()+":"+ann.date());
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

}


Java code
import java.lang.annotation.*;

@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface author {
    public String value();
    public String date();
    
}


author ann=m[i].getAnnotation(Class.forName("author"));
这句话报错,换做author ann=m[i].getAnnotation(author.class);就OK了,为什么呢,author定义为一个annotation,不可以使用Class.forName的形式吗?


------解决方案--------------------
好像是应为泛型的问题啊。
author ann=m[i].getAnnotation(Class.forName("author"));
改成
author ann=m[i].getAnnotation(Class<author>.forName("author"));
试一试
------解决方案--------------------
帮你查了一下API,其中哦用到了泛型,所以要进行强制转化
author ann=m[i].getAnnotation((author)Class.forName("author"));