【问题标题】:Gettining java annotations using reflection使用反射获取 java 注释
【发布时间】:2014-10-16 14:03:56
【问题描述】:

我正在尝试使用反射来发现使用@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() 给了我同样的结果

【问题讨论】:

    标签: java reflection annotations


    【解决方案1】:

    查看@OverrideRetentionPolicy 的文档。基本上,@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

    【讨论】:

    • 所以我无法在运行时获取该信息...?
    • 来自文档:'源注解将被编译器丢弃。'
    猜你喜欢
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多