2017-02-12 86 views
8

我有一个科特林类,其性质有一个Java注释,但我不能接取这些注解与Java反射:如何从Java中获取Kotlin属性的注释?

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属性的注释?

+0

这是一个参数,而不是属性。 – shmosel

+0

@VinceEmigh我不熟悉Kotlin,但我会怀疑这个注解适用于构造函数参数而不是隐式属性。 – shmosel

+0

@VinceEmigh很好。我将停止进一步炫耀自己的无知。 – shmosel

回答

4

Kotlin reference

当你标注的属性或主构造参数,有用于注解,其中从相应科特林元件产生的多个Java元素,并且因此多个可能的位置生成的Java字节码。

在这种情况下,要标注领域,所以你的财产申报应该是这样的:

@field:A 

你的构造看起来像:

TestClass(@field:A myProperty : String) 
5

正如在另一个答复中提到,你可能想注解该字段而不是属性。但是,如果您确实需要注释该属性,则可以通过Kotlin反射查找注释:

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