Как получить аннотации свойства Kotlin из Java?

У меня есть класс kotlin, свойства которого имеют аннотацию Java, но я не могу использовать эти аннотации с отражением Java:

class TestClass(@A var myProperty : String) 

Следующий тест печатает нуль:

 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?

Из ссылки Котлина :

Когда вы комментируете свойство или параметр первичного конструктора, есть несколько элементов Java, которые генерируются из соответствующего элемента Kotlin, и, следовательно, несколько возможных мест для аннотации в сгенерированном байт-коде Java.

В этом случае вы хотите аннотировать поле, поэтому ваше объявление свойства должно выглядеть так:

 @field:A 

Ваш конструктор будет выглядеть так:

 TestClass(@field:A myProperty : String) 

Как уже упоминалось в другом ответе, вы, вероятно, захотите аннотировать поле вместо свойства. Однако, если вам действительно нужно аннотировать свойство, вы можете найти аннотации через отражение Котлина:

 Field field = TestClass.class.getDeclaredField("field"); KProperty<?> property = ReflectJvmMapping.getKotlinProperty(f); System.out.println(property.getAnnotations());