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