जवाबों:
उन्हें प्लेटफ़ॉर्म प्रकार कहा जाता है और उनका मतलब है कि कोटलिन को यह पता नहीं है कि वह मूल्य हो सकता है या नहीं nullऔर यह आपको तय करना है कि यह अशक्त है या नहीं।
संक्षेप में, समस्या यह है कि जावा से आने वाला कोई भी संदर्भ अशक्त हो सकता है, और कोटलिन, डिजाइन द्वारा शून्य-सुरक्षित होने के कारण, उपयोगकर्ता को हर जावा मान की जांच करने के लिए मजबूर करता है, या सुरक्षित कॉल (
?.) या नहीं-शून्य का उपयोग करता है!!)। शुद्ध कोटलिन दुनिया में बहुत काम की विशेषताएं होने के कारण, एक आपदा में बदल जाते हैं जब आपको उन्हें अक्सर कोटलिन या जावा सेटिंग में उपयोग करना पड़ता है।यही कारण है कि हमने एक कट्टरपंथी दृष्टिकोण अपनाया और जब जावा इंटरॉप की बात आती है तो कोटलिन के प्रकार प्रणाली को और अधिक आराम दिया: अब जावा से आने वाले संदर्भों में विशेष रूप से चिह्नित प्रकार हैं - कोटलीन ब्लॉग
यह प्लेटफ़ॉर्म प्रकारों के लिए अंकन है :
T!मतलब " Tया T?"
T" T!या T?"
T"गैर-अशक्त" बना दिया गया था, और बाकी कमोबेश मनमाना था
एक टाइप नोटिफ़ाइड को प्लेटफ़ॉर्म प्रकार! कहा जाता है , जो कि जावा से आने वाला एक प्रकार है और इस प्रकार संभवतः हो सकता है null। जावा को कॉल करते समय यह डिफ़ॉल्ट रूप से कोटलिन कंपाइलर होता है (सबसे बुनियादी मामलों के लिए, जावा विधियों को लगभग प्राप्त करने के लिए एनोटेट किया जा सकता है )। आपको प्लेटफ़ॉर्म प्रकारों को अशक्त प्रकारों के रूप में संभालना चाहिए , जब तक कि आप निश्चित रूप से नहीं जानते हैं कि विशेष एपीआई कभी वापस नहीं आएगा null। संकलक प्लेटफ़ॉर्म प्रकारों को अशक्त और गैर-अशक्त दोनों प्रकारों के चर को असाइन करने की अनुमति देता है।
प्लेटफ़ॉर्म प्रकार के लिए अधिसूचना
[...]
T!का अर्थ है "T or T?" [...]
आप प्लेटफ़ॉर्म प्रकारों को " अज्ञात अशक्तता के प्रकार" के रूप में संदर्भित कर सकते हैं । यह जानना भी महत्वपूर्ण है कि आप अपने स्वयं के प्रकारों के लिए विस्मयादिबोधक-प्रकार का उपयोग नहीं कर सकते हैं, यह कोटलिन सिंटैक्स का हिस्सा नहीं है, यह केवल एक संकेतन है ।
एकल विस्मयादिबोधक चिह्न के साथ समाप्त होने वाले प्रकार के नाम या वर्ग के नाम को कोटलिन में प्लेटफ़ॉर्म प्रकार! कहा जाता है । जब आप कोटलिन में पुराने जावा कोड के साथ काम कर रहे होते हैं, तो आप उन्हें ढूंढ लेते हैं, जिसमें अशक्तता की जानकारी नहीं होती है।
उदाहरण के लिए:
@Nullable Stringजावा में String?कोटलिन द्वारा माना जाता है।
@NotNull Stringजावा में Stringकोटलिन द्वारा माना जाता है।
Stringजावा में एनोटेशन String!कोटलिन द्वारा माना जाता है।
आप एक मंच प्रकार के साथ या तो एक अशक्त या एक अशक्त के रूप में काम कर सकते हैं। कंपाइलर आपको इस प्रकार के सभी तरीकों को कॉल करने की अनुमति देगा। यह आपकी जिम्मेदारी है कि उनका उपयोग कैसे किया जाए। यदि आप जानते हैं कि मूल्य शून्य हो सकता है, तो इससे पहले कि आप इस पर तरीकों को कॉल करें, आपको इसकी तुलना नल के साथ करनी चाहिए। यदि आप जानते हैं कि यह अशक्त नहीं है, तो आप इसे सीधे उपयोग कर सकते हैं लेकिन जावा में, आपको अपवाद मिलेगा यदि अशक्तता के बारे में आपकी धारणा गलत है।
ध्यान दें कि आप कोटलिन कोड में प्लेटफ़ॉर्म प्रकारों की घोषणा नहीं कर सकते, वे केवल जावा कोड से आते हैं।
कोटलिन कोड में जावा विधियों को ओवरराइड करते समय, आपके पास मापदंडों को घोषित करने और अशक्त या गैर-अशक्त के रूप में वापस लौटने का विकल्प होता है। आपको इसे बुद्धिमानी से चुनने की आवश्यकता है, क्योंकि यदि आप मापदंडों को गैर-अशक्त बनाने का निर्णय लेते हैं, तो कोटलिन कंपाइलर इन गैर-शून्य मापदंडों के लिए गैर-शून्य अभिकथन उत्पन्न करता है। और जब अगली बार आप इस कोटलिन कोड को जावा से वापस एक्सेस करते हैं और आप एक शून्य मान पास करते हैं, तो आपको अपवाद मिलेगा।
आशा है कि प्लेटफ़ॉर्म प्रकारों के बारे में आपके सभी संदेहों को दूर करने में मदद करता है।
मैंने इसे विशेष रूप से जावा एपीआई का उपयोग करते समय कुछ बार देखा है
जैसा कि s1m0nw1 द्वारा उल्लेख किया गया है, का T!मतलब है T or T?। अगला सवाल है: क्या है T?? यह अच्छी तरह से https://kotlinlang.org/docs/reference/null-safety.html पर प्रलेखित है । Kotlin कुछ तत्वों होने की अनुमति नहीं है null, उदाहरण के लिए String, जावा के विपरीत
नल की अनुमति देने के लिए, हम एक चर को अशक्त स्ट्रिंग के रूप में घोषित कर सकते हैं, स्ट्रिंग लिखा है ?:
var b: String? = "abc" b = null // ok[...]
b?.lengthयह b.length देता है यदि b अशक्त नहीं है, और अन्यथा शून्य है। इस अभिव्यक्ति का प्रकार है
Int?।
कोटलिन में प्लेटफ़ॉर्म प्रकार से उद्धरण :
एक प्रकार को वैकल्पिक रूप से निर्दिष्ट करने के अलावा (उदाहरण के लिए
Person?), कोटलिन हमें एक अन्य जानवर के साथ प्रस्तुत करता है, जिसेPlatform Typeएक एकल विस्मयादिबोधक चिह्न लगाकर निर्दिष्ट किया जाता है (जैसेPerson!)। यह अवधारणा संगतता कारणों के लिए बनाई गई है, जब जावा जैसे अशक्त-असुरक्षित प्लेटफार्मों से कोड तक पहुंच है। यह अक्सर ऐसा होता है कि जब जावा लाइब्रेरी का उपयोग करते हैं, तो कई तरीके वापस आ जाते हैंSomeType!, क्योंकि परिणाम नगण्य है या नहीं, तो कोटलिन कंपाइलर का पता नहीं चल सकता है।
उदाहरण के लिए:
(Mutable)Collection<T>!
बस निम्नलिखित का अर्थ है: " टी का जावा संग्रह परस्पर हो सकता है या नहीं, अशक्त हो सकता है या नहीं "।
उम्मीद है की यह मदद करेगा।
platform types