अद्यतन: नीचे दिए गए मूल उत्तर को प्रश्न को पूरी तरह से समझे बिना लिखा गया था, और इसलिए यह सीधे प्रश्न को संबोधित नहीं करता है :)
फिर भी, यह सामान्य उपयोग को समझने के इच्छुक लोगों के लिए जानकारीपूर्ण होना चाहिए।final
कीवर्ड ।
प्रश्न के लिए, मैं अपनी टिप्पणी नीचे से उद्धृत करना चाहूंगा।
मेरा मानना है कि आपको यह तय करने के लिए स्वतंत्र छोड़ने के तर्क की अंतिमता को लागू करने के लिए मजबूर नहीं किया जाना चाहिए कि क्या यह अंतिम होना चाहिए या अपने खुद के कार्यान्वयन में नहीं।
लेकिन हां, यह अजीब लगता है कि आप इसे final
इंटरफ़ेस में घोषित कर सकते हैं , लेकिन यह गैर-अंतिम है कार्यान्वयन में है। अगर यह या तो समझ में आता है:
ए। final
इंटरफ़ेस (अमूर्त) विधि तर्कों के लिए कीवर्ड की अनुमति नहीं थी (लेकिन आप इसे कार्यान्वयन में उपयोग कर सकते हैं), या
बी। final
इंटरफ़ेस में एक तर्क के रूप में घोषित करना इसे final
कार्यान्वयन में घोषित करने के लिए मजबूर करेगा (लेकिन गैर-फाइनल के लिए मजबूर नहीं)।
मैं दो कारणों के बारे में सोच सकता हूं कि एक विधि हस्ताक्षर में final
पैरामीटर क्यों हो सकते हैं : बीन्स और ऑब्जेक्ट्स ( वास्तव में, वे दोनों एक ही कारण हैं, लेकिन थोड़ा अलग संदर्भ हैं। )
वस्तुओं:
public static void main(String[] args) {
StringBuilder cookingPot = new StringBuilder("Water ");
addVegetables(cookingPot);
addChicken(cookingPot);
System.out.println(cookingPot.toString());
// ^--- OUTPUT IS: Water Carrot Broccoli Chicken ChickenBroth
// We forgot to add cauliflower. It went into the wrong pot.
}
private static void addVegetables(StringBuilder cookingPot) {
cookingPot.append("Carrot ");
cookingPot.append("Broccoli ");
cookingPot = new StringBuilder(cookingPot.toString());
// ^--- Assignment allowed...
cookingPot.append("Cauliflower ");
}
private static void addChicken(final StringBuilder cookingPot) {
cookingPot.append("Chicken ");
//cookingPot = new StringBuilder(cookingPot.toString());
// ^---- COMPILATION ERROR! It is final.
cookingPot.append("ChickenBroth ");
}
final
कीवर्ड यह सुनिश्चित किया कि हम गलती से एक नया नहीं बनाएगा स्थानीय एक संकलन त्रुटि दिखा कर खाना पकाने के बर्तन जब हम ऐसा करने के लिए प्रयास किया। यह सुनिश्चित किया गया कि चिकन शोरबा हमारे मूल खाना पकाने के बर्तन में मिलाया जाए जो कि addChicken
विधि को मिला। इसकी तुलना addVegetables
जहां हमने फूलगोभी को खो दिया है क्योंकि यह जोड़ा गया है कि मूल पॉट के बजाय एक नए स्थानीय खाना पकाने के बर्तन में मिला।
बीन्स:
यह वस्तुओं के समान अवधारणा है (जैसा कि ऊपर दिखाया गया है) । बीन्स अनिवार्य रूप Object
से जावा में हैं। हालांकि, सेम (JavaBeans) का उपयोग विभिन्न अनुप्रयोगों में संबंधित डेटा के परिभाषित संग्रह को संग्रहीत करने और पारित करने के लिए एक सुविधाजनक तरीके के रूप में किया जाता है। जिस तरह addVegetables
एक नया खाना पकाने के बर्तन बनाकर खाना पकाने की प्रक्रिया को गड़बड़ कर सकता है StringBuilder
और फूलगोभी के साथ इसे फेंक सकता है, यह खाना पकाने के बर्तन जावाबीन के साथ भी कर सकता है ।
final
वैसे भी वे मूल रूप से कुछ भी नहीं करते हैं, क्योंकि वे कॉपी किए जाते हैं।