2017-08-01 9 views
5

पर दिखाई देने के लिए कैसे मजबूर किया जाए, मैं चाहता हूं कि कुछ विधि केवल कोटलिन कोड पर दिखाई दे, न कि जावा कोड पर।कुछ विधि को केवल कोटलिन

उदाहरण के लिए, यहां एक विधि fun method(){} है जिसे केवल कोटलिन कोड में बुलाया जा सकता है और जावा कोड में नहीं कहा जा सकता है।

उत्तर

6

आप वास्तव में आप क्या चाहते हैं @JvmSynthetic एनोटेशन का उपयोग करके प्राप्त कर सकते हैं। यह JVM बाईटकोड में synthetic flag साथ तत्व के निशान, और इसके उपयोग जावा स्रोतों में कोई त्रुटि हो जाता है (अन्य JVM भाषाओं के बारे में काफी यकीन है कि नहीं, जाँच की जरूरत है, लेकिन संभावना यह रूप में अच्छी तरह से काम करेगा):

@JvmSynthetic 
fun f() { /*...*/ } 

चिह्नित तत्व अभी भी कोटलिन में सामान्य रूप से उपयोग किया जा सकता है।

दुर्भाग्य से, @JvmSynthetic का उपयोग किसी वर्ग को चिह्नित करने के लिए नहीं किया जा सकता है (इसमें CLASS लक्ष्य नहीं है)।

अधिक देखें:

+0

ईमानदारी से आपके उत्तर के लिए धन्यवाद! – like

1

कोटलिन stdlib में कुछ विधियों को inline@kotlin.internal.InlineOnly एनोटेशन के साथ चिह्नित किया गया है। इससे संकलक को JVM कक्षाओं में संबंधित विधियों को उत्पन्न किए बिना कोटलिन कोड में इनलाइन करने में मदद मिलती है।

इस चाल का उपयोग stdlib पर विधि गणना को कम करने के लिए किया जाता है। यह एक खतरनाक समाधान है और गलत तरीके से उपयोग किए जाने पर अलग संकलन के साथ समस्याएं पैदा कर सकता है।

पकड़: @kotlin.internal.InlineOnly एनोटेशन आंतरिक है और केवल मानक पुस्तकालय में उपयोग किया जा सकता है। मुझे सार्वजनिक एपीआई में इसे जारी करने की कोई योजना नहीं है।

टी एल; डॉ: आप यह कर सकते हैं, लेकिन केवल तभी जब आप करने के लिए योगदान दे रहे हैं Kotlin stdlib