खोज…


परिचय

एक सूची संख्या, शब्द या वास्तव में कुछ भी पकड़ सकती है। इसलिए हम सूची को सामान्य कहते हैं

जेनेरिक मूल रूप से यह परिभाषित करने के लिए उपयोग किया जाता है कि किस प्रकार का वर्ग धारण कर सकता है और वर्तमान में किस प्रकार की वस्तु धारण करता है।

वाक्य - विन्यास

  • वर्ग className <TypeName>
  • क्लास क्लासनेम <*>
  • ClassName <में UpperBound>
  • ClassName <बाहर LowerBound>
  • वर्ग का नाम < टाइपनाम : अपरबाउंड >

पैरामीटर

पैरामीटर विवरण
नाम लिखो जेनेरिक पैरामीटर का नाम टाइप करें
ऊपरी सीमा सहसंयोजक प्रकार
निम्न परिबंध कंट्राविरेंट प्रकार
कक्षा का नाम वर्ग का नाम

टिप्पणियों

इंप्लाइड अपर बाउंड अशक्त है

Kotlin Generics में, टाइप पैरामीटर T की ऊपरी सीमा Any? होगी Any? । इसलिए इस वर्ग के लिए:

class Consumer<T>

प्रकार पैरामीटर T वास्तव में T: Any? । एक गैर-अशक्त ऊपरी सीमा बनाने के लिए, स्पष्ट रूप से विशिष्ट T: Any । उदाहरण के लिए:

class Consumer<T: Any>

घोषणा-स्थल का विचरण

घोषणा-स्थल के विचरण को एक बार और सभी उपयोग-स्थलों के लिए उपयोग-स्थल विचरण की घोषणा के रूप में सोचा जा सकता है।

  class Consumer<in T> { fun consume(t: T) { ... } }

  fun charSequencesConsumer() : Consumer<CharSequence>() = ...

  val stringConsumer : Consumer<String> = charSequenceConsumer() // OK since in-projection
  val anyConsumer : Consumer<Any> = charSequenceConsumer() // Error, Any cannot be passed
  
  val outConsumer : Consumer<out CharSequence> = ... // Error, T is `in`-parameter

डिक्लेरेशन-साइट विचरण के व्यापक उदाहरण हैं List<out T> , जो अपरिवर्तनीय है ताकि T केवल रिटर्न वैल्यू टाइप के रूप में प्रकट हो, और Comparator<in T> , जो केवल T को तर्क के रूप में प्राप्त करता है।

उपयोग-स्थल विचरण

उपयोग-साइट विचरण जावा वाइल्डकार्ड के समान है:

बाहर प्रक्षेपण:

  val takeList : MutableList<out SomeType> = ... // Java: List<? extends SomeType>

  val takenValue : SomeType = takeList[0] // OK, since upper bound is SomeType

  takeList.add(takenValue) // Error, lower bound for generic is not specified

इन-प्रक्षेपण:

  val putList : MutableList<in SomeType> = ... // Java: List<? super SomeType>
  
  val valueToPut : SomeType = ...
  putList.add(valueToPut) // OK, since lower bound is SomeType

  putList[0] // This expression has type Any, since no upper bound is specified

स्टार-प्रक्षेपण

  val starList : MutableList<*> = ... // Java: List<?>

  starList[0] // This expression has type Any, since no upper bound is specified
  starList.add(someValue) // Error, lower bound for generic is not specified

यह सभी देखें:



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow