कोटलिन जेनरिक में "*" और "कोई" के बीच अंतर


106

मुझे यकीन नहीं है कि मैं पूरी तरह से SomeGeneric<*>और के बीच के अंतर को समझता हूं SomeGeneric<Any>। मुझे लगता है कि *कुछ भी (वाइल्ड कार्ड) का Anyप्रतिनिधित्व करता है और उस वस्तु का प्रतिनिधित्व करता है जो सभी वस्तुओं से प्राप्त होती है। तो ऐसा लगता है कि वे एक ही होना चाहिए, लेकिन वे कर रहे हैं?

जवाबों:


158

यह स्टार प्रक्षेपण के बारे में सोचने के लिए सहायक हो सकता है , न कि किसी भी प्रकार का प्रतिनिधित्व करने के लिए, बल्कि कुछ निश्चित प्रकार जो आपको नहीं पता कि वास्तव में क्या है।

उदाहरण के लिए, प्रकार कुछMutableList<*> की सूची का प्रतिनिधित्व करता है (आप नहीं जानते कि वास्तव में क्या है)। इसलिए यदि आप इस सूची में कुछ जोड़ने की कोशिश करते हैं, तो आप सफल नहीं होंगे। यह Strings की सूची Int, या s की सूची , या किसी और चीज़ की सूची हो सकती है। कंपाइलर इस सूची में किसी भी वस्तु को डालने की अनुमति नहीं देगा क्योंकि यह सत्यापित नहीं कर सकता है कि सूची इस प्रकार की वस्तुओं को स्वीकार करती है। हालांकि, यदि आप ऐसी सूची से कोई तत्व प्राप्त करने का प्रयास करते हैं, तो आपको निश्चित रूप से एक प्रकार की वस्तु मिलेगी Any?, क्योंकि कोटलिन की सभी वस्तुएं विरासत में मिली हैं Any

से ASCO नीचे टिप्पणी:

इसके अतिरिक्त List<*>किसी भी प्रकार की वस्तुएं हो सकती हैं, लेकिन केवल उस प्रकार की, इसलिए इसमें स्ट्रिंग्स (लेकिन केवल स्ट्रिंग्स) List<Any> शामिल हो सकते हैं , जबकि स्ट्रिंग्स और इंटेगर और व्हाट्सन, सभी एक ही सूची में हो सकते हैं।


83
अच्छा उत्तर, कुछ के लिए यह जोड़ना उपयोगी हो सकता है कि लिस्ट <*> में किसी भी प्रकार की वस्तुएं हो सकती हैं , लेकिन केवल उस प्रकार की, इसलिए इसमें स्ट्रिंग्स (लेकिन केवल स्ट्रिंग्स) शामिल हो सकते हैं, जबकि सूची <Any> में स्ट्रिंग्स और इंटेगर शामिल हो सकते हैं और whatnot, सभी एक ही सूची में।
fweigl

1
यहाँ इसी तरह के स्पष्टीकरण के साथ एक दिलचस्प लेख: typealias.com/guides/star-projections-and-how-they-work
croc

28

इस संदर्भ में, मुझे लगता है कि आप का मतलब है, SomeGeneric<*>के बराबर है SomeGeneric<out Any?>। जावा समकक्ष है SomeGeneric<? extends Object>

वाक्य-विन्यास को "तारा-अनुमान" कहा जाता है। यहाँ आधिकारिक डॉक्स हैं: https://kotlinlang.org/docs/reference/generics.html#star-projections

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.