java - 使用反射获取java注释

标签 java reflection annotations

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

最佳答案

查看@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

关于java - 使用反射获取java注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26406457/

相关文章:

java - 如何在类路径中找到接口(interface)的所有实现?

java - 如何通过反射将字段值设置为普通对象

pointers - 无法反射(reflect)不返回指针,编译器在转换时出现 panic ?

java - 即使无法联系发现服务器,是否有办法启动 Discovery 客户端 Spring 应用程序?

java - RetentionPolicy CLASS 与 RUNTIME

java - 维基百科解析器

java - 如何在java中找到两点之间的每个像素?

java - o.s.k.r.ReplyingKafkaTemplate : Reply timed out for: ProducerRecord

java - 在使用 java 获取文档时在 mongo 查询中传递 DBRef

java - 未注解的方法会覆盖使用@NotNull 注解的方法