त्रुटि संदेश भ्रमित है।
समस्या यह है कि जब आप enum मान कोड देते हैं, तो आप enum का एक अनाम उप वर्ग बना रहे हैं। (इसकी कक्षा EnumWithAbstractMethodAndMembers$1
होगी) एक उप-वर्ग अपने सुपर-क्लास के निजी सदस्यों तक नहीं पहुंच सकता है, हालांकि घोंसला वाले वर्ग जेनरेट किए गए एक्सेसर विधि के माध्यम से कर सकते हैं। आपको निजी क्षेत्र तक पहुंचने में सक्षम होना चाहिए, और यह त्रुटि संदेश देता है जो आपको गलत-अग्रणी प्रतीत होता है।
बीटीडब्ल्यू आप इसका उपयोग कर सकते हैं, लेकिन आपको IMHO की आवश्यकता नहीं है।
public int addValue(final int value) {
return super.memberVariable + value;
}
यहाँ मैं त्रुटि संदेश में एक बग के रूप में प्रवेश करेंगे एक छोटा उदाहरण के रूप में यह समस्या का समाधान करने के लिए नेतृत्व नहीं करता है।
public enum MyEnum {
One {
public int getMemberVariableFailes() {
// error: non-static variable memberVariable cannot be referenced from a static context
return memberVariable;
}
public int getMemberVariable2OK() {
return memberVariable2;
}
public int getMemberVariableOK() {
return super.memberVariable;
}
};
private final int memberVariable = 1;
final int memberVariable2 = 1;
}
टॉम Hawkin की प्रतिक्रिया के आधार पर, इस उदाहरण में एक ही त्रुटि संदेश हो जाता है।
public class MyNotEnum {
// this is the static context in which the anonymous is created
public static final MyNotEnum One = new MyNotEnum() {
public int getMemberVariableFailes() {
// error: non-static variable memberVariable cannot be referenced from a static context
return memberVariable;
}
public int getMemberVariableOK() {
return super.memberVariable;
}
};
private final int memberVariable = 1;
}
तुलना
public class MyNotEnum {
public class NestedNotEnum extends MyNotEnum {
public int getMemberVariableFailes() {
// compiles just fine.
return memberVariable;
}
public int getMemberVariableOK() {
return super.memberVariable;
}
}
private final int memberVariable = 1;
}
स्रोत
2011-12-09 08:38:01
ध्वनि का उचित। जवाब के लिए Thx और 'सुपर' के साथ संकेत! – Andreas
मैंने इसे 'javac' बग के रूप में लॉग किया है। –
वे कहते हैं कि यह कुछ दिनों में दिखाई देना चाहिए। http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7119746 मैंने देखा है कि ओरेकल ने मेरी बग्स को स्वीकार किया ** ** ** सूर्य की तुलना में तेज़ ** तेज है। –