如果我有一个在字段上使用的参数化注释,该字段引用的对象是否可以访问注释参数?
@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?
}
}
谢谢
答案 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
在这里: