के लिए क्षेत्र बनाने के लिए मेरे पास है Android पर निम्नलिखित Kotlin वर्ग:Kotlin - केवल पढ़ने के लिए बाहरी वर्गों
class ThisApplication: Application() {
lateinit var network: INetwork
override fun onCreate() {
super.onCreate()
network = Network()
}
}
अब, किसी भी बाहरी वर्ग बस करके INetwork संदर्भ प्राप्त कर सकते हैं:
application.network
हालांकि, वह भी एक बाहरी वर्ग कि मान ओवरराइट के लिए संभव बनाता है:
application.network = myNewNetworkReference
मैं दूसरे विकल्प से बचना चाहते हैं। दुर्भाग्य से, मैं फ़ील्ड val
नहीं बना सकता क्योंकि इसकी शुरुआत onCreate
कॉलबैक के अंदर होने की आवश्यकता है।
मैं भी इस तरह क्षेत्र निजी बनाने और एक समारोह के माध्यम से संपर्क में लाने, के बारे में सोचा:
private lateinit var network: INetwork
fun getNetwork() = network
हालांकि, जो कोई भी getNetwork (कॉल) अभी भी यह करने के लिए एक नया मान असाइन कर सकते हैं, तो जैसे:
application.getNetwork() = myNewNetworkReference
मैं कैसे नेटवर्क क्षेत्र रीड-ओनली के लिए बाहरी वर्गों द्वारा कर सकते हैं? या इससे भी बेहतर, क्या इसे val
बनाने का कोई तरीका है, भले ही मैं इसे एक कन्स्ट्रक्टर के अंदर शुरू नहीं कर सकता?
यह सच नहीं है कि किसी विधि का कॉलर इस विधि के मान को फिर से सौंप सकता है। 'application.getNetwork() = myNewNetworkReference' संकलित नहीं होगा। – yole