如何在Kotlin中列出字段注释?

时间:2016-03-10 20:52:20

标签: annotations kotlin

我有一个注释

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为空。

如何正确列出注释?

2 个答案:

答案 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();
}
默认情况下会保留

Kotlin annotations

annotation class Field(val value: String)