我正在尝试使用反射来发现使用 @Override 注释(或任何注释)注释的“init”方法,但是好的,这是我的示例,当然,已经简化了很多 基类:
public abstract class A
{
public void init()
{
}
}
然后是子类:
public class B extends A
{
String bla;
@Override
public void init()
{
}
public void init(String bla)
{
this.bla=bla;
}
}
所以我运行来获取带注释的方法的代码是这样的:
public static void main(String[] args)
{
ClassLoader c = Main.class.getClassLoader();
try
{
Class<?> clazz = c.loadClass("correct.path.to.class.B");
for (Method method : clazz.getDeclaredMethods())
{
if (method.getName().equals("init"))
{
System.out.println(method.getDeclaredAnnotations().length);
}
}
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
两种方法都正确找到,但令人惊讶的是,当读取包含注释的数组的长度时,我得到两次“0”,知道这里出了什么问题吗?
方法 getAnnotation()
给出了相同的结果
最佳答案
查看@Override
和RetentionPolicy
的文档。基本上,@Override
注释在运行时不可用,它只是一个源注释。
http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/RetentionPolicy.html
http://docs.oracle.com/javase/7/docs/api/java/lang/Override.html
关于java - 使用反射获取java注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26406457/