चर के लिए कई उपयोग हैं final
। यहां महज कुछ हैं
अंतिम निरंतर
public static class CircleToolsBetter {
public final static double PI = 3.141;
public double getCircleArea(final double radius) {
return (Math.pow(radius, 2) * PI);
}
}
यह तब आपके कोड के अन्य हिस्सों के लिए उपयोग किया जा सकता है, या अन्य वर्गों द्वारा एक्सेस किया जा सकता है, इस तरह यदि आप कभी भी मूल्य बदलेंगे तो आपको उन्हें एक-एक करके बदलना नहीं पड़ेगा।
अंतिम चर
public static String someMethod(final String environmentKey) {
final String key = "env." + environmentKey;
System.out.println("Key is: " + key);
return (System.getProperty(key));
}
}
इस वर्ग में, आप एक स्कोप्ड अंतिम चर बनाते हैं जो पैरामीटर परिवेश में एक उपसर्ग जोड़ता है। इस मामले में, अंतिम चर केवल निष्पादन क्षेत्र के भीतर अंतिम होता है, जो विधि के प्रत्येक निष्पादन पर अलग होता है। हर बार विधि दर्ज करने के बाद, अंतिम का पुनर्निर्माण किया जाता है। जैसे ही इसका निर्माण किया जाता है, इसे विधि निष्पादन के दायरे में नहीं बदला जा सकता है। यह आपको विधि की अवधि के लिए एक चर को ठीक करने की अनुमति देता है। निचे देखो:
public class FinalVariables {
public final static void main(final String[] args) {
System.out.println("Note how the key variable is changed.");
someMethod("JAVA_HOME");
someMethod("ANT_HOME");
}
}
अंतिम निरंतर
public double equation2Better(final double inputValue) {
final double K = 1.414;
final double X = 45.0;
double result = (((Math.pow(inputValue, 3.0d) * K) + X) * M);
double powInputValue = 0;
if (result > 360) {
powInputValue = X * Math.sin(result);
} else {
inputValue = K * Math.sin(result); // <= Compiler error
}
ये विशेष रूप से तब उपयोगी होते हैं जब आपके पास वास्तव में कोड की लंबी लाइनें होती हैं, और यह संकलक त्रुटि उत्पन्न करेगा ताकि आप तर्क / व्यावसायिक त्रुटि में न चलें जब कोई गलती से चर बदलता है जिसे बदला नहीं जाना चाहिए।
अंतिम संग्रह
अलग-अलग मामला जब हम कलेक्शंस की बात कर रहे हैं, तो आपको उन्हें एक अमोघ के रूप में स्थापित करने की आवश्यकता है।
public final static Set VALID_COLORS;
static {
Set temp = new HashSet( );
temp.add(Color.red);
temp.add(Color.orange);
temp.add(Color.yellow);
temp.add(Color.green);
temp.add(Color.blue);
temp.add(Color.decode("#4B0082")); // indigo
temp.add(Color.decode("#8A2BE2")); // violet
VALID_COLORS = Collections.unmodifiableSet(temp);
}
अन्यथा, यदि आप इसे निर्धारित नहीं करते हैं:
Set colors = Rainbow.VALID_COLORS;
colors.add(Color.black); // <= logic error but allowed by compiler
अंतिम कक्षाओं और अंतिम विधियों को क्रमशः बढ़ाया या अधिलेखित नहीं किया जा सकता है।
संपादित करें: अंतिम कक्षा की नियुक्ति पंजीकरण प्रक्रिया का पता लगाने के लिए:
क्लास फाइनल करने के दो तरीके हैं। कक्षा घोषणा में कीवर्ड फाइनल का उपयोग करना सबसे पहले है:
public final class SomeClass {
// . . . Class contents
}
एक वर्ग फाइनल बनाने का दूसरा तरीका अपने सभी कंस्ट्रक्टरों को निजी घोषित करना है:
public class SomeClass {
public final static SOME_INSTANCE = new SomeClass(5);
private SomeClass(final int value) {
}
इसे अंतिम रूप से चिह्नित करना आपको परेशानी से बचाता है यदि यह पता लगाना कि यह वास्तविक है, इस परीक्षण वर्ग को देखने के लिए। पहली नज़र में सार्वजनिक दिखता है।
public class Test{
private Test(Class beanClass, Class stopClass, int flags)
throws Exception{
// . . . snip . . .
}
}
दुर्भाग्य से, चूंकि वर्ग का एकमात्र निर्माता निजी है, इसलिए इस वर्ग का विस्तार करना असंभव है। टेस्ट क्लास के मामले में, कोई कारण नहीं है कि क्लास फाइनल होनी चाहिए। टेस्ट क्लास इस बात का एक अच्छा उदाहरण है कि कैसे अंतिम कक्षाओं में समस्याएँ पैदा हो सकती हैं।
इसलिए आपको इसे अंतिम रूप से तब चिन्हित करना चाहिए जब आप इसका निर्माण करने वाले को निजी बनाकर एक वर्ग फाइनल कर दें।