2017-02-12 27 views
8

Tôi có một lớp Kotlin mà khách sạn có một chú thích Java, nhưng tôi không thể acess các chú thích với Java phản ánh:Cách nhận chú thích của thuộc tính Kotlin từ Java?

class TestClass(@A var myProperty : String) 

Các bản in thử sau 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)); 
    } 
} 

Làm thế nào tôi có thể nhận được các chú thích của thuộc tính kotlin đã cho?

+0

Đó là thông số chứ không phải thuộc tính. – shmosel

+0

@VinceEmigh Tôi không quen với Kotlin, nhưng tôi nghi ngờ chú thích sẽ áp dụng cho tham số hàm tạo chứ không phải thuộc tính ngầm. – shmosel

+0

@VinceEmigh Rất tốt. Tôi sẽ không còn phô trương sự thiếu hiểu biết của mình nữa. – shmosel

Trả lời

4

Từ Kotlin reference:

Khi bạn đang diễn giải một tài sản hoặc một tham số constructor tiểu học, có nhiều yếu tố Java được tạo ra từ các yếu tố Kotlin tương ứng, và do đó nhiều địa điểm nhất có thể cho các chú thích trong Java bytecode được tạo ra.

Trong trường hợp này, bạn muốn chú thích lĩnh vực này, vì vậy kê khai tài sản của bạn sẽ giống như thế:

@field:A 

constructor của bạn sẽ trông giống như:

TestClass(@field:A myProperty : String) 
5

Như đã đề cập trong câu trả lời khác , bạn có thể muốn chú thích trường thay vì thuộc tính. Tuy nhiên, trong trường hợp bạn thực sự cần chú thích thuộc tính, bạn có thể tìm thấy chú thích qua phản chiếu của Kotlin:

Field field = TestClass.class.getDeclaredField("field"); 
KProperty<?> property = ReflectJvmMapping.getKotlinProperty(f); 
System.out.println(property.getAnnotations()); 
Các vấn đề liên quan