如何从Java获取Kotlin属性的注释?
我有一个kotlin类,其属性有一个Java注释,但是我不能使用Java反射来获取这些注释:
class TestClass(@A var myProperty : String)
以下测试打印null:
public class TestKotlinField { @Retention(RetentionPolicy.RUNTIME) public @interface A{} @Test public void test() throws NoSuchFieldException { System.out.println(TestClass.class.getDeclaredField("myProperty").getAnnotation(A.class)); } }
我怎样才能得到一个给定的kotlin属性的注释?
从Kotlin的参考文献 :
注释属性或主构造参数时,有多个Java元素是从相应的Kotlin元素生成的,因此在生成的Java字节码中有多个可能的注释位置。
在这种情况下,您要注释该字段,所以您的属性声明应该如下所示:
@field:A
你的构造函数看起来像这样:
TestClass(@field:A myProperty : String)
正如在另一个答案中提到的,你可能想注解的领域,而不是属性。 但是,如果您确实需要注释该属性,则可以通过Kotlin反射查找注释:
Field field = TestClass.class.getDeclaredField("field"); KProperty<?> property = ReflectJvmMapping.getKotlinProperty(f); System.out.println(property.getAnnotations());