2017-02-12 16 views
8

Kimin özellikleri bir Java ek açıklaması bir KOTLIN sınıf var, ama Java yansıma ile bu açıklamaları acess edemez: boşJava'dan bir Kotlin özelliği ek açıklamaları nasıl alınır?

class TestClass(@A var myProperty : String) 

Aşağıdaki test baskılar:

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

nasıl alabilirim Belirli bir kotlin özellik ek açıklamaları? Kotlin reference itibaren

+0

Bu bir özellik değil, bir parametre. – shmosel

+0

@VinceEmigh Kotlin ile aşina değilim, ancak ek açıklamanın örtük özellikten ziyade yapıcı parametresi için geçerli olduğundan şüphelenirim. – shmosel

+0

@VinceEmigh Çok iyi. Daha fazla cehaletimi açığa vurmaktan vazgeçerim. – shmosel

cevap

4

:

Eğer bir özelliği veya birincil yapıcı parametresi annotating ediyoruz, ek açıklamada için ilgili Kotlin elemanı üretilir birden Java elemanları ve bu nedenle birden fazla olası yer vardır oluşturulan Java bayt kodu. Bu durumda

, sen alanını açıklama istiyoruz, bu nedenle özellik bildirimi gibi görünmelidir: Başka cevapta belirtildiği üzere

TestClass(@field:A myProperty : String) 
5

: gibi

@field:A 

Sizin yapıcı olmazdı Muhtemelen mülk yerine alanı ek açıklama yapmak istersiniz. Bununla birlikte, özelliği açıklamaya gerek duymanız durumunda, Kotlin yansıması aracılığıyla ek açıklamaları bulabilirsiniz:

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