2017-02-12 53 views
8

Mam klasy Kotlin, którego właściwości mają adnotacji Java, ale nie mogę acess te adnotacje z refleksji Java:Jak uzyskać adnotacje o własności Kotlin z Java?

class TestClass(@A var myProperty : String) 

Poniższe wydruki testowe zerowe:

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)); 
    } 
} 

Jak mogę uzyskać adnotacje danej właściwości kotlin?

+0

To parametr, a nie właściwość. – shmosel

+0

@VinceEmigh Nie jestem zaznajomiony z Kotlinem, ale podejrzewam, że adnotacja odnosi się do parametru konstruktora, a nie do właściwości niejawnej. – shmosel

+0

@VinceEmigh Bardzo dobrze. Przestanę od dalszej obnoszenia się z moją niewiedzą. – shmosel

Odpowiedz

4

Z Kotlin reference:

Kiedy adnotacji do właściwości lub parametru konstruktora podstawowy, istnieje wiele elementów Java, które są wytwarzane z odpowiedniego elementu Kotlin, a zatem wielu możliwe lokalizacje dla adnotacji w wygenerowany kod bajtowy Java.

W tym przypadku chcesz opisywanie pola, więc deklaracja nieruchomość powinna wyglądać następująco:

@field:A 

konstruktora wyglądałby następująco:

TestClass(@field:A myProperty : String) 
5

Jak wspomniano w innym odpowiedź prawdopodobnie chcesz dodać adnotację do pola zamiast do właściwości. Jednak w przypadku, gdy naprawdę musisz opisać właściwość, możesz znaleźć adnotacje za pośrednictwem refleksji Kotlin:

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