我有一个注释
public @interface Field {
String value();
}
和java类,由它注释:
public class Animal {
@Field("name")
private String name;
}
我尝试列出所有字段'下一个代码的注释:
for(field in clazz.declaredFields){
for(annotation in field.annotations){
when(annotation){
is Field -> {
//do something
}
}
}
}
clazz为Class<T>
但field.annotations
为空。
如何正确列出注释?
答案 0 :(得分:6)
问题不在于Kotlin特定,您还没有正确配置Field
注释。默认情况下,每个注释都会保留RetentionPolicy.CLASS
,这意味着它无法通过反射访问。如果要在运行时访问注释,则必须使用RetentionPolicy.RUNTIME
。
@Retention(RetentionPolicy.RUNTIME)
public @interface Field {
String value();
}
答案 1 :(得分:6)
默认情况下,Java注释不会在运行时保留,因此您需要指定:
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Retention(RUNTIME)
public @interface Field {
String value();
}
默认情况下会保留
annotation class Field(val value: String)