2017-02-12 9 views
8

मैं एक 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)); 
    } 
} 

मैं कैसे प्राप्त कर सकते हैं दिए गए कोटलिन संपत्ति की टिप्पणियां?

+0

यह एक पैरामीटर है, संपत्ति नहीं। – shmosel

+0

@VinceEmigh मैं कोटलिन से परिचित नहीं हूं, लेकिन मुझे संदेह होगा कि एनोटेशन संपत्ति के बजाए कन्स्ट्रक्टर पैरामीटर पर एनोटेशन लागू होता है। – shmosel

+0

@VinceEmigh बहुत अच्छी तरह से। मैं अपनी अज्ञानता को आगे बढ़ाने से दूर रहूंगा। – shmosel

उत्तर

4
Kotlin reference से

:

जब आप एक संपत्ति या एक प्राथमिक निर्माता पैरामीटर टिप्पणी कर रहे, एक से अधिक जावा तत्व है जो इसी Kotlin तत्व से उत्पन्न होते हैं, और में टिप्पणी के लिए इसलिए कई संभावित स्थानों रहे हैं उत्पन्न जावा बाइटकोड।

इस मामले में, आप क्षेत्र व्याख्या करना चाहते हैं, तो अपनी संपत्ति घोषणा तरह दिखना चाहिए:

TestClass(@field:A myProperty : String) 
5

के रूप में एक और उत्तर में उल्लेख किया है:

@field:A 

आपका निर्माता कैसा लगेगा , आप शायद संपत्ति के बजाय क्षेत्र को एनोटेट करना चाहते हैं। हालांकि, अगर आपको वास्तव में संपत्ति को एनोटेट करने की आवश्यकता है, तो आप कोटलिन प्रतिबिंब के माध्यम से टिप्पणियां पा सकते हैं:

Field field = TestClass.class.getDeclaredField("field"); 
KProperty<?> property = ReflectJvmMapping.getKotlinProperty(f); 
System.out.println(property.getAnnotations()); 
संबंधित मुद्दे