कोटलिन में स्थैतिक प्रारंभिक ब्लॉक


84

कोटलिन में स्थैतिक आरंभीकरण खंड के समतुल्य क्या है ?

मैं समझता हूं कि कोटलिन को स्थिर चीजों को नहीं करने के लिए डिज़ाइन किया गया है। मैं समान शब्दार्थ के साथ कुछ ढूंढ रहा हूं - जब कक्षा पहली बार भरी जाती है तो कोड एक बार चलाया जाता है।

मेरा विशिष्ट उपयोग मामला यह है कि मैं Android AppCompat पुस्तकालय से DayNight सुविधा को सक्षम करना चाहता हूं और निर्देशApplication कक्षा के स्थैतिक प्रारंभिककरण ब्लॉक में कुछ कोड डालने के लिए कहते हैं ।

जवाबों:


123

कुछ दृष्टिकोण से, कोटलिन में companion objects जावा कक्षाओं के स्थिर भागों के बराबर हैं। विशेष रूप से, उन्हें वर्ग के पहले उपयोग से पहले आरंभीकृत किया जाता है, और यह आपको initजावा स्टैटिक शुरुआती सलाहकारों के प्रतिस्थापन के रूप में उनके ब्लॉक का उपयोग करने देता है:

class C {
    companion object {
        init {
            //here goes static initializer code
        }
    }
}

1
साथी वस्तु यहां एक ओवरकिल है
वोड्डन

4
@ वोड्डन, ओपी ने मौजूदा वर्ग के पहले उपयोग से पहले कोड को निष्पादित करने के बारे में पूछा। objectघोषणा के साथ समाधान के लिए एक की आवश्यकता होती है वास्तव में इसका उपयोग आलसी आरंभीकरण के कारण कहीं न कहीं होता है।
हॉटकी

1
@voddan क्या आप यह बताना चाहेंगे कि यह एक ओवरकिल क्यों है और इसके विकल्प क्या होंगे?
मार्सिन कोज़ीस्की 22

2
क्षमा करें, मेरा बुरा, मुझे यह सोचने में गलती हो गई कि आपने क्लास लोडिंग की परवाह नहीं की। साथी वस्तु यहां सही समाधान है
वोदन

यदि स्थैतिक आरंभ आप सभी प्राप्त करना चाहते हैं, तो साथी वस्तु को संभवतः निजी या संरक्षित किया जाना चाहिए।
मिप्पा

3
companion object  { 
    // Example for a static variable
    internal var REQUEST_CODE: Int? = 500

    // Example for a static method
    fun callToCheck(value: String): String {
        // your code
    }
}

किसी कक्षा के अंदर एक वस्तु घोषणा को साथी कीवर्ड के साथ चिह्नित किया जा सकता है। और इसके तहत हम जावा स्टैटिक विधि और चर की तरह उपयोग कर सकते हैं।


अपने कोड में जोड़ें कुछ अंश
फ्रीलांसर

@DerickDaniel अब जाँच करें।
अभिलाषा यादव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.