मैं कोटलिन-स्टडलिब में @JvmSynthetic
एनोटेशन में आया हूं, और मैं सोच रहा हूं कि यह क्या है, लेकिन दुर्भाग्यवश, यह अनियंत्रित है।कोटलिन में @ जेवीएम सिंथेटिक का इच्छित उपयोग क्या है?
जहां तक मैं समझता हूं, इसे प्रोग्राम तत्व में लागू करने से संबंधित बाइटकोड तत्वों में synthetic
संशोधक जोड़ा जाएगा। परिणामस्वरूप, तत्व जावा से अदृश्य हो जाता है: जावा कोड में
class MyClass {
@JvmSynthetic
fun f() { }
}
कहीं:
MyClass c = new MyClass();
c.f() // Error: cannot resolve method f()
लेकिन इसके साथ ही तत्वों Kotlin कोड में अभी भी दिखाई दे रहे हैं:
val c = MyClass()
c.f() // OK
छुपा है गैर-कोटलिन स्रोतों से घोषणाएं @JvmSynthetic
का वैध उपयोग करती हैं? क्या यह इरादा उपयोग है? अन्य उपयुक्त उपयोग के मामले क्या हैं?
के बाद से @JvmSynthetic
जावा से कार्यों को छुपाता है, वे जावा में अधिरोहित नहीं किया जा सकता या तो (और जब यह एक abstract
सदस्य की बात आती है, कॉल तो AbstractMethodError
में परिणाम)। यह देखते हुए, क्या मैं जावा स्रोतों में कोटलिन कक्षा के ओवरराइडिंग सदस्यों को प्रतिबंधित करने के लिए @JvmSynthetic
का उपयोग कर सकता हूं?
अच्छी तरह से, मुझे लगता है कि यह एक खतरनाक टूल जैसा दिखता है जिसे सावधानी से संभालने की आवश्यकता है, आपको जेटब्रेन लोगों से सीधे पूछना चाहिए , लेकिन फिर भी यह 'कोटलिन-स्टडलिब' का हिस्सा है, यह एक सार्वजनिक एपीआई है। यह मुझे लगता है कि '@ जेवीएम सिंथेटिक' के लिए उपयोग के मामलों का उपयोग करना चाहिए जो एक सामान्य डेवलपर (या शायद एक पुस्तकालय/उपकरण डेवलपर) का सामना कर सकता है। इसके अलावा, 'सिंथेटिक' विधियों का उपयोग 'जावैक' द्वारा किया जाता है, फिर केवल घोंसला वाले वर्गों के लिए: कम से कम एक अलग हस्ताक्षर के साथ एक विधि को ओवरराइड करने के लिए (गैर-जेनेरिक लोगों के साथ ओवरराइड जेनेरिक तरीकों सहित)। – hotkey