हाँ, हम मेथड लोकल इनर क्लास का उपयोग करके लोकल फाइनल वेरिएबल्स को एक्सेस कर सकते हैं क्योंकि फाइनल वेरिएबल्स हीप पर स्टोर होते हैं और तब तक जीवित रहते हैं जब तक मेथड लोकल इनर क्लास ऑब्जेक्ट जीवित रह सकता है।
मेथड लोकल इनर क्लास
- एक लोकल इनर क्लास इंस्टेंस को आर्गुमेंट के रूप में डिलीवर किया जा सकता है और मेथड्स से पुनर्प्राप्त किया जा सकता है और यह वैध स्कोप के अंदर उपलब्ध होता है।
- मेथड लोकल इनर क्लास में एकमात्र सीमा यह है कि एक लोकल पैरामीटर केवल तभी निष्पादित किया जा सकता है जब इसे फाइनल के रूप में परिभाषित किया गया हो।
- मेथड को लोकल पैरामीटर्स को निष्पादित करने के लिए कहा जा सकता है, उस मेथड के निष्पादन के बाद जिसके भीतर लोकल इनर क्लास घोषित की गई थी। परिणामस्वरूप, लोकल पैरामीटर्स अब अपने मानों को बरकरार नहीं रखेंगे।
- मान लोकल इनर क्लास ऑब्जेक्ट बनाने से पहले निश्चित होने चाहिए। यदि आवश्यक हो, तो एक नॉन-फाइनल वेरिएबल को फाइनल वेरिएबल में कॉपी किया जा सकता है जिसे बाद में लोकल इनर क्लास द्वारा निष्पादित किया जाता है।
उदाहरण
class MainClassTest {
private int x = 10;
public void sampleMethod() {
final int y = 20;
class MethodLocalInnerClassTest {
public void accessMainClassVar() {
System.out.println(x); // आउटर क्लास वेरिएबल एक्सेस करना
System.out.println(y); // फाइनल लोकल वेरिएबल एक्सेस करना
}
}
MethodLocalInnerClassTest mainTest = new MethodLocalInnerClassTest();
mainTest.accessMainClassVar();
}
}
// Test.java
public class Test {
public static void main(String args[]) {
MainClassTest test = new MainClassTest();
test.sampleMethod();
}
}
आउटपुट
10 20
नोट: Java 8 से, "इफेक्टिवली फाइनल" वेरिएबल्स (जिन्हें असाइनमेंट के बाद संशोधित नहीं किया जाता) भी लोकल इनर क्लास में एक्सेस किए जा सकते हैं, भले ही वे स्पष्ट रूप से final मार्क न किए गए हों।