如何从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());