किसी भीतरी कक्षा बी से बाहरी वर्ग ए के फ़ील्ड एक्स तक पहुंचने के लिए, मुझे एहसास है कि आप "एथिस.एक्स" का उपयोग कर सकते हैं। लेकिन क्या होगा यदि बाहरी वर्ग भी गुमनाम है? उदाहरण के लिए,किसी अज्ञात अनाम वर्ग से बाहरी अज्ञात वर्ग के क्षेत्र तक पहुंच
public class Main1 {
public static void main(String[] args) {
Comparable c1 = new Comparable(){
int x = 3;
public int compareTo(Object o) {
Comparable c2 = new Comparable(){
int x = 4;
public int compareTo(Object o) {
return x; // <-- THIS LINE
}
};
return c2.compareTo(o);
}
};
System.out.println(c1.compareTo(null));
}
}
जब यह कोड चलता है, 4 के मान मुद्रित क्योंकि इस बात का c2 के क्षेत्र एक्स मूल्य है। हालांकि, मैं "इस लाइन" चिह्नित रेखा को बदलना चाहता हूं ताकि यह बाहरी वर्ग के x (यानी, सी 1 के फील्ड एक्स, मान 3 के साथ) लौटाए। यदि बाहरी वर्ग (अर्थात, c1 की क्लास) एक नामित वर्ग एक थे, तो मैं बदल सकते
return x;
साथ
return A.this.x;
लेकिन चूंकि बाहरी वर्ग भी अनाम है, मेरे पास नहीं है उपयोग करने के लिए एक नाम।
प्रश्न: क्या "इस लाइन" लेबल वाली रेखा को संशोधित करने का कोई तरीका है ताकि यह अज्ञात वर्गों को नामित कक्षाओं में बदलने के बिना सी 2 के बजाय सी 1 के फील्ड एक्स को संदर्भित करे?
मुझे एहसास है कि यह कोड वास्तव में बदसूरत है और यह अज्ञात कक्षाओं का उपयोग करने के लिए अच्छी प्रोग्रामिंग शैली नहीं है, लेकिन कोड किसी अन्य प्रोग्राम द्वारा उत्पन्न किया जा रहा है, और जनरेटर को लागू करने का यह सबसे आसान तरीका है।
फ़ील्ड को अंतिम होने की आवश्यकता नहीं है; यह केवल पैरामीटर/स्थानीय चर के लिए है। अगर उसने बाहरी क्षेत्र 'वाई' कहा जाता है, तो वह इसे सबसे निचले वर्ग से एक्सेस कर सकता है। –