2015-11-21 14 views
34

यह बेवकूफ सवाल होना चाहिए, लेकिन मैं वास्तव में कोटलिन के लिए नया हूं और मुझे कोई समाधान नहीं मिला।संपत्ति को प्रारंभ किया जाना चाहिए या अमूर्त होना चाहिए

कक्षा क्षेत्र कैसे घोषित करें? जैसे हम जावा में यह हो सकता है:

protected SharedPreferences mSharedPreferences; 

और बाद में onCreate() में:

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) 

अब मैं इसे उपयोग कर सकते हैं कहीं भी मैं चाहता हूँ (इस आधार गतिविधि के उपवर्गों में)।

मैं Kotlin में भी ऐसा ही करने की कोशिश:

protected var sharedPreferences : SharedPreferences 

और onCreate() में:

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) 

लेकिन मैं एक चेतावनी मिलती है: "संपत्ति प्रारंभ या सार हो जाना चाहिए"

उत्तर

66

हैं आप कन्स्ट्रक्टर के बाहर एक प्रॉपर्टी प्रारंभ करना चाहते हैं, तो late-initialized properties वह है जो आप खोज रहे हैं। lateinit संशोधक के साथ संपत्ति घोषित करें, जो अन्यथा अपेक्षित प्रारंभकर्ता को छोड़ करने की अनुमति देगा और संपत्ति का उपयोग कर देगा अपवाद के साथ असफल जब तक कुछ सार्थक मूल्य इसे करने के लिए असाइन किया गया है:

protected lateinit var sharedPreferences: SharedPreferences 
+3

मैंने कोशिश की रक्षा की वर SharedPreferences उपयोग करने के लिए ": साझा किए गए संदर्भ? = शून्य "और यह भी काम करता है, क्या अंतर है? –

+0

मुझे लगता है कि अगर मैं DI के लिए Dagger2 का उपयोग करता हूं, तो मुझे आपके संस्करण का उपयोग करना होगा, है ना? –

+11

अंतर यह है कि आप देर से डेट के साथ गैर-शून्य मूल्यों की घोषणा कर सकते हैं। –

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

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