2016-08-04 18 views
16

निम्नलिखित कोड है:kotlin में कोई == वस्तु

Any().javaClass 

java.lang.Object का मूल्य है। क्या इसका मतलब है Any और Object एक ही कक्षा हैं? उनके संबंध क्या हैं?

उत्तर

15

सं

Kotlin docs (जोर मेरा)

Kotlin में सभी वर्गों एक आम सुपर क्लास Any है, कि कोई supertypes के साथ एक कक्षा के लिए एक डिफ़ॉल्ट सुपर घोषित किया जाता है से

:

class Example // Implicitly inherits from Any

Anyjava.lang.Object नहीं है; विशेष रूप से, इसमें equals(), hashCode() और toString() के अलावा कोई अन्य सदस्य नहीं है। अधिक जानकारी के लिए कृपया जावा इंटरऑपरेबिलिटी सेक्शन से परामर्श लें।

इसके अलावा, मैप किया प्रकार पर अनुभाग से हम पाते हैं:

Kotlin कुछ जावा प्रकार विशेष रूप से व्यवहार करता है। इस तरह के प्रकार जावा "जैसा है" से लोड नहीं होते हैं, लेकिन संबंधित कोटलिन प्रकारों के लिए मैप किए जाते हैं। मैपिंग केवल संकलन समय पर मायने रखता है, रनटाइम प्रतिनिधित्व अपरिवर्तित रहता है। जावा के आदिम प्रकार इसी Kotlin प्रकार (मन में मंच प्रकार रखते हुए) करने के लिए मैप की जाती हैं:

...

java.lang.Objectkotlin.Any!

यह कहना है कि रनटाइम परjava.lang.Object और kotlin.Any! इलाज कर रहे हैं वही। लेकिन ! भी मतलब है कि प्रकार एक मंच प्रकार है, जो अशक्त चेक आदि अक्षम करने

जावा में कोई संदर्भ अशक्त हो सकता है के संबंध में निहितार्थ है, जिसके लिए सख्त अशक्त-सुरक्षा अव्यावहारिक की Kotlin की आवश्यकताओं बनाता है जावा से आने वाली वस्तुओं। के प्रकार जावा घोषणाओं को विशेष रूप से कोटलिन में माना जाता है और प्लेटफार्म प्रकार कहा जाता है। ऐसे प्रकार के लिए नल-चेक आराम से हैं, ताकि सुरक्षा उनके लिए जावा की तरह ही हो (नीचे और देखें)।

...

जब हम मंच प्रकार के चर पर तरीकों कहते हैं, Kotlin संकलन समय पर नहीं मुद्दा nullability त्रुटियों करता है, लेकिन कॉल एक अशक्त-सूचक अपवाद या एक दावा है कि Kotlin को रोकने के लिए उत्पन्न करता है की वजह से, कार्यावधि में विफल हो सकता है प्रचार से nulls:

+2

ई.आई. इस से परामर्श लें: https://kotlinlang.org/docs/reference/java-interop.html#mapped-types – voddan

+0

क्या आप उनके बीच का अंतर समझा सकते हैं और किसी का जावा क्लास ऑब्जेक्ट क्यों है? – oshai

6

Kotlin संकलक दो अलग प्रकार रूप kotlin.Any और java.lang.Object व्यवहार करता है, लेकिन क्रम में वे एक ही java.lang.Objectवर्ग साथ प्रतिनिधित्व कर रहे हैं।

javaClass संपत्ति एक उदाहरण के रनटाइम क्लास को लौटाती है, इसलिए आपको दोनों मामलों में java.lang.Object कक्षा मिलती है।

अन्य प्रकार भी हैं जो संकलन समय पर अलग हैं, लेकिन रनटाइम पर समान हैं; वे दस्तावेज के Mapped types खंड में सूचीबद्ध हैं।

+0

कोई भी प्रतीक्षा(), सूचित(), सूचित करें सभी() जो नियमित जावा ऑब्जेक्ट के विपरीत लॉक के रूप में उपयोग करना असंभव बनाता है। – dkarmazi

+0

@dkarmazi आप इसे 'java.lang.Object' पर डाल सकते हैं, और फिर आप इन तरीकों को कॉल कर पाएंगे। – Ilya

0

वास्तव में, कोटलिन लैंग के पहलू में java.lang.Object नहीं है, इसलिए आप निश्चित रूप से AnyObject नहीं कह सकते हैं। आप केवल Any कोटलिन में Object स्थान ले सकते हैं।

0

"Any"java.lang.Object का एनालॉग है: कोटलिन में सभी कक्षाओं का एक सुपरक्लास।