मैं कोड साफ़ कर रहा था और स्थिर सदस्य तक सभी पहुंच बदल रहा था, जैसे कि वे कक्षा द्वारा योग्यता प्राप्त कर रहे हैं जिसमें उन्हें परिभाषित किया गया है। हालांकि, यह निम्नलिखित समस्या का कारण बनता है जो मुझे परेशान कर रहा है।आसपास के एक व्यक्ति द्वारा योग्यता प्राप्त होने पर नेस्टेड कक्षा से निजी स्थैतिक क्षेत्र दिखाई दे सकते हैं?
मेरे पास एक नेस्टेड कक्षा के साथ एक कक्षा है। इस घोंसले वर्ग पर एनोटेशन में मैं आसपास के वर्ग में एक निजी स्थैतिक अंतिम क्षेत्र का उल्लेख करता हूं। योग्यता के बिना ऐसा करते समय (नीचे कक्षा डी पर एनोटेशन में) यह काम करता है। हालांकि, कक्षा क्वालीफायर (कक्षा सी पर एनोटेशन में) जोड़ते समय संकलक फ़ील्ड को बताता है (नीचे) दिखाई नहीं देता है।
public class VisibilityTest {
@interface A {
int f();
}
@A(f = VisibilityTest.v) //fails
private static class C {
int c = VisibilityTest.v; //works
}
@A(f = v) //works
private static class D {
int d = VisibilityTest.v; //works
}
private final static int v = 5;
}
दोनों मामलों में चर एक ही क्षेत्र को संदर्भित करता है, तो ऐसा क्यों होता है?
कोई विचार नहीं, लेकिन दिलचस्प है, विशेष रूप से क्योंकि 'OuterClass.privateStaticField' idiom संकलित किया जाएगा, कहें, एक नेस्टेड क्लास की विधि के भीतर से, जो असंगत लगता है ... – Mena
चूंकि एनोटेशन पैरामीटर संकलित-समय संकल्प योग्य होना चाहिए (हमारे मामले में, निरंतर अभिव्यक्ति), यह संकलक में एक गड़बड़ प्रतीत होता है। – biziclop
क्या javac संस्करण का उपयोग किया जाता है? – hahn