कोटलिन में जावा स्थिर अंतिम क्षेत्रों के बराबर क्या है?


132

जावा में, एक स्थिरांक घोषित करने के लिए, आप कुछ ऐसा करते हैं:

class Hello {
    public static final int MAX_LEN = 20;
}

कोटलिन में समतुल्य क्या है?


1
चूंकि कोटलिन में वैल रीड-ओनली कोनोट है, तो क्या यह पर्याप्त नहीं होगा?
इगोरगानपोलस्की

जवाबों:


213

कोटलिन प्रलेखन के अनुसार यह समकक्ष है:

class Hello {
    companion object {
        const val MAX_LEN = 20
    }
}

उपयोग:

fun main(srgs: Array<String>) {
    println(Hello.MAX_LEN)
}

इसके अलावा यह स्थिर अंतिम संपत्ति है (गेट्टर के साथ क्षेत्र):

class Hello {
    companion object {
        @JvmStatic val MAX_LEN = 20
    }
}

और अंत में यह स्थिर अंतिम क्षेत्र है:

class Hello {
    companion object {
        @JvmField val MAX_LEN = 20
    }
}

पहला उदाहरण (कॉन्स्टल फील्ड के साथ) विशेषताओं के लिए इस्तेमाल किया जा सकता है। लोकप्रिय मामला: एकल फाइल में सभी वेब एप पथों की घोषणा करें और इसे ऐसे कोड वाले नियंत्रकों से संदर्भित करें: "@RequestMapping (पथ = arrayOf (WebPathConstants.MapApiPath))" (स्प्रिंग बूट विशेषता)
मानुषिन इगोर

हाय दोस्तों! क्या आपको पता है कि यह @JvmField अभी भी आवश्यक है? मैं एंड्रॉइड में इसका उपयोग कर रहा हूं और यह एक लिंट चेतावनी दिखाता है कि "कॉन्स्ट" का उपयोग इसके बजाय किया जा सकता है। मैंने इसे कॉन्स्ट में बदल दिया और इसका उपयोग करने वाले जावा वर्ग को कोई समस्या नहीं है।
लिएंड्रो Ocampo

1
@LeandroOcampo अगर स्थैतिक स्थिर क्षेत्र है, तो यह अभी भी आवश्यक है const val- - समय को संकलित करें और सुनिश्चित करें कि इसे @JvmField valकुछ मामलों में प्रतिस्थापन के रूप में उपयोग किया जा सकता है । इसके माध्यम से अगर मूल्य - रनटाइम में गणना की जाती है, या यह आदिम प्रकार या स्ट्रिंग नहीं है। Ref: kotlinlang.org/docs/reference/…
रुस्लान

36

यदि आपके पास एक कार्यान्वयन है Hello, तो companion objectएक कक्षा के अंदर उपयोग करें

class Hello {
  companion object {
    val MAX_LEN = 1 + 1
  }

}

यदि Helloएक शुद्ध सिंगलटन ऑब्जेक्ट है

object Hello {
  val MAX_LEN = 1 + 1
}

यदि गुण संकलन-समय स्थिरांक हैं, तो एक constकीवर्ड जोड़ें

object Hello {
  const val MAX_LEN = 20
}

यदि आप इसे जावा में उपयोग करना चाहते हैं, तो @JvmStaticएनोटेशन जोड़ें

object Hello {
  @JvmStatic val MAX_LEN = 20
}

1
सबसे अच्छा जवाब
rorkbellini

9

मेरे लिए

object Hello {
   const val MAX_LEN = 20
}

बहुत बॉयलरप्लेट था। मैंने अपनी कक्षा के ऊपर स्थिर अंतिम फ़ील्ड को इस तरह रखा

val MIN_LENGTH = 10

class MyService{
}

2
उन मामलों में जहां आपको फ़ाइल (यानी जावा private) के बाहर उजागर होने की आवश्यकता नहीं है , यह परिभाषा सबसे संक्षिप्त है।
javaxian
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.