मेरे पास वास्तव में यह सटीक प्रश्न 30 मिनट पहले था, इसलिए मैंने चारों ओर खुदाई शुरू कर दी और इसके लिए कोई समाधान या समाधान नहीं खोज सका, लेकिन खोज करते समय मुझे कोटलिंग्लांग वेबसाइट पर यह खंड मिला जो बताता है कि:
ध्यान दें कि एक्सटेंशन को एक अशक्त रिसीवर प्रकार के साथ परिभाषित किया जा सकता है। इस तरह के एक्सटेंशन को ऑब्जेक्ट वैरिएबल पर भी बुलाया जा सकता है, भले ही इसका मूल्य शून्य हो।
तो फिर मुझे कभी भी सबसे अजीब विचार आया, क्यों एक अशक्त रिसीवर (वास्तव में उस रिसीवर का उपयोग किए बिना) के साथ एक एक्सटेंशन फ़ंक्शन को परिभाषित नहीं किया और फिर इसे एक अशक्त वस्तु पर कॉल किया! तो मैंने कोशिश की, और यह बहुत अच्छी तरह से काम किया, लेकिन यह बहुत बदसूरत लग रहा था। यह इस तरह था:
(null as Type?).staticFunction(param1, param2)
इसलिए मैं चारों ओर चला गया कि रिसीवर प्रकार की मेरी एक्सटेंशन फ़ाइल में एक वैल बनाकर, जिसमें शून्य का मान था और फिर इसे मेरे अन्य वर्ग में उपयोग करें। इसलिए, एक उदाहरण के रूप में, यहां बताया गया है कि मैंने Navigation
एंड्रॉइड में क्लास के लिए "स्टैटिक" एक्सटेंशन फ़ंक्शन कैसे लागू किया है: मेरे नेवीगेशन एक्सटेंशन में।
val SNavigation: Navigation? = null
fun Navigation?.createNavigateOnClickListener(@IdRes resId: Int, args: Bundle? = null, navOptions: NavOptions? = null,
navigationExtras: Navigator.Extras? = null) : (View) -> Unit {
//This is just implementation details, don't worry too much about them, just focus on the Navigation? part in the method declaration
return { view: View -> view.navigate(resId, args, navOptions, navigationExtras) }
}
इसका उपयोग करने वाले कोड में:
SNavigation.createNavigateOnClickListener(R.id.action_gameWonFragment_to_gameFragment)
जाहिर है, यह एक वर्ग का नाम नहीं है, यह क्लास प्रकार का एक चर है जिसमें एक शून्य मान है। यह स्पष्ट रूप से विस्तार निर्माता की ओर से बदसूरत है (क्योंकि उन्हें चर बनाना है) और डेवलपर की ओर (क्योंकि उन्हें SType
वास्तविक वर्ग नाम के बजाय प्रारूप का उपयोग करना है ), लेकिन यह निकटतम है जिसे अभी प्राप्त किया जा सकता है वास्तविक स्थिर कार्यों की तुलना में। उम्मीद है, कोटलिन भाषा निर्माता इस मुद्दे पर प्रतिक्रिया देंगे और भाषा में उस विशेषता को जोड़ देंगे ।