निम्नलिखित कोड है:kotlin में कोई == वस्तु
Any().javaClass
java.lang.Object
का मूल्य है। क्या इसका मतलब है Any
और Object
एक ही कक्षा हैं? उनके संबंध क्या हैं?
निम्नलिखित कोड है:kotlin में कोई == वस्तु
Any().javaClass
java.lang.Object
का मूल्य है। क्या इसका मतलब है Any
और Object
एक ही कक्षा हैं? उनके संबंध क्या हैं?
सं
Kotlin docs (जोर मेरा)Kotlin में सभी वर्गों एक आम सुपर क्लास
Any
है, कि कोई supertypes के साथ एक कक्षा के लिए एक डिफ़ॉल्ट सुपर घोषित किया जाता है से:
class Example // Implicitly inherits from Any
Any
java.lang.Object
नहीं है; विशेष रूप से, इसमेंequals()
,hashCode()
औरtoString()
के अलावा कोई अन्य सदस्य नहीं है। अधिक जानकारी के लिए कृपया जावा इंटरऑपरेबिलिटी सेक्शन से परामर्श लें।
इसके अलावा, मैप किया प्रकार पर अनुभाग से हम पाते हैं:
Kotlin कुछ जावा प्रकार विशेष रूप से व्यवहार करता है। इस तरह के प्रकार जावा "जैसा है" से लोड नहीं होते हैं, लेकिन संबंधित कोटलिन प्रकारों के लिए मैप किए जाते हैं। मैपिंग केवल संकलन समय पर मायने रखता है, रनटाइम प्रतिनिधित्व अपरिवर्तित रहता है। जावा के आदिम प्रकार इसी Kotlin प्रकार (मन में मंच प्रकार रखते हुए) करने के लिए मैप की जाती हैं:
...
java.lang.Object
kotlin.Any!
यह कहना है कि रनटाइम परjava.lang.Object
और kotlin.Any!
इलाज कर रहे हैं वही। लेकिन !
भी मतलब है कि प्रकार एक मंच प्रकार है, जो अशक्त चेक आदि अक्षम करने
जावा में कोई संदर्भ अशक्त हो सकता है के संबंध में निहितार्थ है, जिसके लिए सख्त अशक्त-सुरक्षा अव्यावहारिक की Kotlin की आवश्यकताओं बनाता है जावा से आने वाली वस्तुओं। के प्रकार जावा घोषणाओं को विशेष रूप से कोटलिन में माना जाता है और प्लेटफार्म प्रकार कहा जाता है। ऐसे प्रकार के लिए नल-चेक आराम से हैं, ताकि सुरक्षा उनके लिए जावा की तरह ही हो (नीचे और देखें)।
...
जब हम मंच प्रकार के चर पर तरीकों कहते हैं, Kotlin संकलन समय पर नहीं मुद्दा nullability त्रुटियों करता है, लेकिन कॉल एक अशक्त-सूचक अपवाद या एक दावा है कि Kotlin को रोकने के लिए उत्पन्न करता है की वजह से, कार्यावधि में विफल हो सकता है प्रचार से nulls:
Kotlin संकलक दो अलग प्रकार रूप kotlin.Any
और java.lang.Object
व्यवहार करता है, लेकिन क्रम में वे एक ही java.lang.Object
वर्ग साथ प्रतिनिधित्व कर रहे हैं।
javaClass
संपत्ति एक उदाहरण के रनटाइम क्लास को लौटाती है, इसलिए आपको दोनों मामलों में java.lang.Object
कक्षा मिलती है।
अन्य प्रकार भी हैं जो संकलन समय पर अलग हैं, लेकिन रनटाइम पर समान हैं; वे दस्तावेज के Mapped types खंड में सूचीबद्ध हैं।
वास्तव में, कोटलिन लैंग के पहलू में java.lang.Object
नहीं है, इसलिए आप निश्चित रूप से Any
Object
नहीं कह सकते हैं। आप केवल Any
कोटलिन में Object
स्थान ले सकते हैं।
"Any"
java.lang.Object
का एनालॉग है: कोटलिन में सभी कक्षाओं का एक सुपरक्लास।
ई.आई. इस से परामर्श लें: https://kotlinlang.org/docs/reference/java-interop.html#mapped-types – voddan
क्या आप उनके बीच का अंतर समझा सकते हैं और किसी का जावा क्लास ऑब्जेक्ट क्यों है? – oshai