如何在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是空的。

如何正确列出注释?

2 Solutions collect form web for “如何在Kotlin中列出字段注释?”

问题不是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) 
  • 如何使用Mockito / PowerMockito来模拟Kotlin的对象?
  • Kotlin:有没有办法清理数量过载?
  • 有没有办法在活动之间传递函数引用?
  • 如何使用ByteArray.getOrElse
  • val ... get(){...}在Kotlin
  • Kotlin中的Room Persistence lib实现
  • Kotlingenerics和可空类types
  • 在TeamCity Kotlin DSL中使用相同的步骤预先安装多个BuildType
  • 在超类的初始化中使用variables时,重写variables会创建一个NPE
  • 未解决的参考错误在copyOfRange
  • 如果不相等,kotlin地图的增加值
  • Kotlin language will be the best programming language for Android.