Java 如何访问注释实例中的注释参数
如果在字段上使用参数化注释,字段引用的对象是否可以访问注释参数Java 如何访问注释实例中的注释参数,java,annotations,Java,Annotations,如果在字段上使用参数化注释,字段引用的对象是否可以访问注释参数 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Classy { Class<?> klazz(); } 假设访问: class Foo{ private Class<?> klazz = String.class; private void useAnno
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Classy {
Class<?> klazz();
}
假设访问:
class Foo{
private Class<?> klazz = String.class;
private void useAnnotationParameterIfAvailable(){
klazz = what goes here?
}
}
class-Foo{
私有类klazz=String.Class;
私有void useAnnotationParameterIfAvailable(){
klazz=这里有什么?
}
}
谢谢在目标场上使用以下方法
java.lang.reflect.Field.getAnnotation(Class<T>)
getAnnotation(Classy.class.klazz()
注意:可能需要一些铸造这里和那里,我没有一个IDE手边
有关更多示例,请参见此处:
在这里:
否-注释是字段的一个属性,对象无法迭代当前引用它的字段(为了高效地查找字段,JVM必须维护一个专用的查找数据结构,并在每次字段分配时更新它。这将非常昂贵…)
当然,如果对象的类型唯一地标识字段,您可以使用类路径扫描来查找该类型的所有带注释的字段-但是如果该类型标识要使用的类,则将注释放在该类型上会容易得多:-)谢谢Vijay,但恐怕您误解了这些要求——您描述的是如何从包含字段的类而不是从字段实例本身访问注释。也就是说,-代码不能从
Foo
内部使用,谢谢Istvan-我担心您的方法无法工作,因为Foo
类本身没有注释,只有另一个类中类型为Foo
的字段class.getAnnotation()
将始终返回null
。是的,我认为类本身已被注释,抱歉。我明白了。听起来很有道理。否则就太容易了:)谢谢你,梅里顿。
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();
}