如何在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

但是field.annotations是空的。

如何正确列出注释?

问题不是Kotlin特定的,你只是没有正确配置Field注解。 默认情况下,每个注释都通过RetentionPolicy.CLASS ,这意味着它不能通过reflection访问。 如果要访问运行时中的注释,则必须使用RetentionPolicy.RUNTIME

 @Retention(RetentionPolicy.RUNTIME) public @interface Field { String value(); } 

Java注释在默认情况下不会在运行时保留,所以您需要指定这样的:

 import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; @Retention(RUNTIME) public @interface Field { String value(); } 

Kotlin注释默认保留:

 annotation class Field(val value: String)