如何在带注释的实例中访问注释参数

时间:2012-06-21 09:33:13

标签: java annotations

如果我有一个在字段上使用的参数化注释,该字段引用的对象是否可以访问注释参数?

 @Retention(RetentionPolicy.RUNTIME)
  @Target(ElementType.FIELD)
  public @interface Classy {
      Class<?> klazz();
  }

用法:

class Bar{
    @Classy(klazz=Integer.class)
    Foo foo;
    ...
}

假设访问:

class  Foo{
  private Class<?> klazz = String.class;

  private void useAnnotationParameterIfAvailable(){
    klazz = what goes here?
  }
}

谢谢

3 个答案:

答案 0 :(得分:2)

否 - 注释是字段的属性,对象无法迭代当前引用它的字段(为了有效地查找字段,JVM必须维护专用的查找数据结构,并在每个字段分配时更新它这将是非常昂贵的......)

当然,如果对象的类型唯一地标识字段,则可以使用类路径扫描来查找该类型的所有带注释的字段 - 但如果类型标识要使用的类,则将注释放在类型上将是更容易: - )

答案 1 :(得分:0)

在目标字段上使用以下方法。

java.lang.reflect.Field.getAnnotation(Class<T>)

示例代码

    try {
        Field field = this.getClass().getField("foo");
        Ignore annotation = field.getAnnotation(Classy.class);

        //do what ever with annotation
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchFieldException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

答案 2 :(得分:0)

Foo.class.getAnnotation(Classy.class).klazz();

注意:这里可能需要一些投射,我没有IDE方便。

有关更多示例,请参见此处:

http://tutorials.jenkov.com/java-reflection/annotations.html

在这里:

Is it possible to read the value of a annotation in java?