कोटलिन में जेनेरिक फैली हुई क्लास और इम्प्लीमेंट इंटरफेस


86

मान लें कि मैं एक प्रकार का चर चाहता हूं, टी, जो एक निश्चित वर्ग का विस्तार करता है और एक इंटरफ़ेस लागू करता है। कुछ इस तरह:

class Foo <T : Bar implements Baz> { ... }

कोटलिन में इसके लिए वाक्य रचना क्या है?

जवाबों:


179

कोण कोष्ठक के अंदर केवल एक ऊपरी बाउंड निर्दिष्ट किया जा सकता है।

जब एक से अधिक बाधाएँ आती हैं, तो कोटलिन सामान्य बाधाओं के लिए अलग-अलग वाक्य-विन्यास प्रस्तुत करता है:

class Foo<T>(val t: T) where T : Bar, T : Baz { ... }

और कार्यों के लिए:

fun <T> f(): Foo where T : Bar, T : Baz { ... }

यह यहाँ प्रलेखित है


3
क्या पैरामास्टर प्रकार के मज़े के लिए इसका उपयोग करने का कोई तरीका है, उदाहरण के लिए, मज़ा फू (arg: ClassType, InterfaceType) {}? कक्षा में टाइप पैरामीटर को जोड़े बिना
Ufkoku

1
@ यूफोकू, नहीं, ऐसा करने का कोई तरीका नहीं है: कोटलिन में कोई चौराहा प्रकार नहीं है, और जेनेरिक मापदंडों को केवल स्पष्ट रूप से घोषित किया जा सकता है।
हॉटकी

@hotkey मैं नीचे एक समारोह है fun <T> wrapClientListener(listener: RemoteController.OnClientUpdateListener): T where T : RemoteController.OnClientUpdateListener, T : NotificationListenerService:। मुझे टी के प्रकार की परवाह नहीं है। लेकिन जब मैं इस विधि को कॉल करता हूं, तो कोटलिन विशिष्ट प्रकार के लिए पूछता है। तो मैं इस विधि को कैसे कह सकता हूं?
लीमेन्घो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.