2015-10-08 8 views
19

मैं एक lateinit सामान्य प्रकार के गैर-व्यर्थ संपत्ति के साथ एक पैरामिट्रीकृत वर्ग बनाने के लिए कोशिश कर रहा हूँ:एक सामान्य टाइप की गई संपत्ति क्यों शून्य है?

class Test<T> { 

    private lateinit var t : T 

    private lateinit var s : String 

} 

बाद अनुमति दी है, लेकिन पूर्व नहीं है।

Error:(7, 11) ''lateinit'' modifier is not allowed on nullable properties 

जब से मैं T? घोषित नहीं किया, मैं क्यों यह मामला है के रूप में उलझन में हूँ: संकलक निम्नलिखित त्रुटि देता है।

+0

अरे यह, मैं अपने आप को पोस्ट करते हैं और इस सवाल का जवाब देने जा रहा था:

एक ऊपरी प्रकार जोड़ ठीक करने के लिए। मुझे इसे सरल लुकअप के साथ नहीं मिला; मैं प्रश्न के शीर्षक में "लेटिनिट" सहित सुझाव देना चाहता हूं, क्योंकि यह आपकी समस्या के लिए पहली जगह है। –

उत्तर

32

(http://kotlinlang.org/docs/reference/generics.html#generic-constraints)

दूसरे शब्दों में "डिफ़ॉल्ट ऊपरी सीमा (यदि कुछ भी निर्दिष्ट) Any? है", जब आप T उपयोग करते हैं, Kotlin मानता है कि इस हो सकता है किसी भी प्रकार, यह आदिम, वस्तु या एक निरर्थक संदर्भ।

टीएल; डॉ;

class Test<T: Any> { ... } 
+0

और बीटीडब्ल्यू, सिंटैक्स 'टी? 'की अनुमति नहीं है, इसलिए तकनीकी रूप से कोई असंगतता नहीं है। 'टी' के उपयोग में – voddan

+2

' टी 'की अनुमति है, 'टी' की घोषणा नहीं। तो 'वैल एक्स: टी? 'मान्य है। –

+0

आप टी पर और अधिक पढ़ सकते हैं? यहां https://medium.com/@igorwojda/kotlin-deep-dive-into-generics-nullability-9853d9a9f50d –

संबंधित मुद्दे