कोटलिन में स्थिरांक को परिभाषित करने के कुछ तरीके हैं,
साथी वस्तु का उपयोग करना
companion object {
const val ITEM1 = "item1"
const val ITEM2 = "item2"
}
आप किसी भी वर्ग के अंदर साथी ऑब्जेक्ट ब्लॉक से ऊपर का उपयोग कर सकते हैं और इस ब्लॉक के अंदर अपने सभी क्षेत्रों को परिभाषित कर सकते हैं। लेकिन इस दृष्टिकोण के साथ एक समस्या है, प्रलेखन कहता है,
भले ही साथी वस्तुओं के सदस्य अन्य भाषाओं में स्थिर सदस्यों की तरह दिखते हैं, पर रनटाइम में वे अभी भी वास्तविक वस्तुओं के सदस्य हैं, और उदाहरण के लिए, इंटरफेस को लागू कर सकते हैं।
जब आप साथी ऑब्जेक्ट का उपयोग करके अपने स्थिरांक बनाते हैं, और विघटित बायोटेक को देखते हैं , तो आप नीचे कुछ पसंद करेंगे,
ClassName.Companion Companion = ClassName.Companion.$$INSTANCE;
@NotNull
String ITEM1 = "item1";
@NotNull
String ITEM2 = "item2";
public static final class Companion {
@NotNull
private static final String ITEM1 = "item1";
@NotNull
public static final String ITEM2 = "item2";
// $FF: synthetic field
static final ClassName.Companion $$INSTANCE;
private Companion() {
}
static {
ClassName.Companion var0 = new ClassName.Companion();
$$INSTANCE = var0;
}
}
यहाँ से आप आसानी से देख सकते हैं कि दस्तावेज़ीकरण में क्या कहा गया है, भले ही साथी वस्तुओं के सदस्य अन्य भाषाओं में स्थिर सदस्यों की तरह दिखते हों, पर वे अभी भी वास्तविक वस्तुओं के सदस्य हैं। यह आवश्यक से अतिरिक्त काम कर रहा है।
अब एक और तरीका आता है, जहाँ हमें नीचे की तरह साथी ऑब्जेक्ट का उपयोग करने की आवश्यकता नहीं है ,
object ApiConstants {
val ITEM1: String = "item1"
}
यदि आप ऊपर स्निपेट के बाइट कोड के विघटित संस्करण को देखते हैं, तो आपको कुछ इस तरह मिलेगा,
public final class ApiConstants {
private static final String ITEM1 = "item1";
public static final ApiConstants INSTANCE;
public final String getITEM1() {
return ITEM1;
}
private ApiConstants() {
}
static {
ApiConstants var0 = new ApiConstants();
INSTANCE = var0;
CONNECT_TIMEOUT = "item1";
}
}
अब यदि आप उपरोक्त विघटित कोड देखते हैं, तो यह प्रत्येक चर के लिए विधि प्राप्त कर रहा है। इस विधि की आवश्यकता नहीं है।
इन get तरीकों में से छुटकारा पाने के लिए , आप का उपयोग करना चाहिए स्थिरांक से पहले वैल से नीचे की तरह,
object ApiConstants {
const val ITEM1: String = "item1"
}
अब यदि आप ऊपर स्निपेट का डिकम्पोज्ड कोड देखते हैं, तो आपको पढ़ना आसान लगेगा क्योंकि यह आपके कोड के लिए कम से कम पृष्ठभूमि रूपांतरण करता है।
public final class ApiConstants {
public static final String ITEM1 = "item1";
public static final ApiConstants INSTANCE;
private ApiConstants() {
}
static {
ApiConstants var0 = new ApiConstants();
INSTANCE = var0;
}
}
तो यह स्थिरांक बनाने का सबसे अच्छा तरीका है।
public static final
जावा में किसी फ़ील्ड के लिए कुछ चाहते हैं , तोconst val
अपने साथी ऑब्जेक्ट में उपयोग करें। यदि आप एकprivate static final
फील्ड और पब्लिक गेट्टर चाहते हैं, तोval
अपने साथी ऑब्जेक्ट में उपयोग करें।