जावा की enum
सुविधा द्वारा प्रदान की गई वाक्यविन्यास चीनी कभी-कभी थोड़ा उलझन में हो सकती है। इस उदाहरण है, जो संकलन नहीं है पर विचार करें:enum परिभाषा में स्टेटिक संदर्भ
public enum TestEnum {
FOO("foo") {
public void foo() {
helper(); // <- compiler error
}
};
String name;
TestEnum(String name) {
this.name = name;
}
public abstract void foo();
private void helper(){
// do stuff (using this.name, so must not be static)
}
}
किसी को भी व्याख्या कर सकते हैं क्यों संकलक का कहना है
गैर स्थिर विधि 'सहायक()' एक स्थिर संदर्भ से संदर्भित नहीं किया जा सकता
यह संदर्भ स्थिर कैसे है?
आप इस this.
helper()
(यहाँ एक भ्रामक बात है?: यदि हम वास्तव में एक "स्थिर संदर्भ" में संकलक की तरह चलता है, कैसे "this
" काम कर सकते हैं) के लिए कॉल को बदलने के द्वारा संकलित कर सकते हैं या द्वारा डिफ़ॉल्ट स्तर पर helper()
की दृश्यता में वृद्धि। तुम किसे वरीयता दोगे? इसके अलावा, एक बेहतर प्रश्न शीर्षक का सुझाव देने के लिए स्वतंत्र महसूस करें :-)
संपादित करें: मुझे some discussion about this मिला - लेकिन कोई वास्तविक जवाब नहीं मिला। मेरे सहयोगी इस तथ्य को सोचते हैं कि this.helper()
काम वास्तव में एक कंपाइलर बग है। और वास्तव में नए जावा संस्करणों के साथ यह काम करने के लिए प्रतीत होता है (हालांकि super.helper()
करता है): "प्रतीक सहायक()" नहीं मिल सकता है "। (हालांकि कुछ अजीब चल रहा है: विभिन्न जावा संस्करणों के साथ प्रयास करने के बाद मुझे this.helper()
को किसी भी के साथ फिर से संकलित करने के लिए नहीं मिल सकता है ...)
मेरे पास पुस्तक है; आप किस पहेली का मतलब है? (मुझे इसे जल्दी से नहीं मिला।) – Jonik
पुस्तक की मेरी प्रतियां कहीं और बक्से में पैक की गई हैं, इसलिए मुझे कोई जानकारी नहीं है। –