की स्थिर अंतिम क्षेत्र के लिए एक उदाहरण के क्षेत्र और एक ही नाम के एक स्थानीय चर हम उपसर्ग this.
के साथ क्षेत्र के लिए उपयोग प्राप्त करने के साथ बीच अंतर के लिए वर्ग के नाम के साथ पहुँच योग्यता से एक स्थिर संदर्भ में एक ही बात:असाइन एक ही नाम
import java.util.*;
class Test {
public static final Map<String,Object> map;
static {
Map<String,Object> map = new HashMap<>();
// ...
// assume I fill the map with useful data here
// ...
// now I want to freeze it and assign it to the field
Test.map = Collections.unmodifiableMap(map);
}
}
संकलक इस कोड के साथ कोई लेना देना नहीं चाहता है। मेरे पास इस तरह के कई चर हैं और उनमें से सभी के लिए यह चिल्लाना जारी रखता है: "अंतिम चर के लिए मान असाइन नहीं कर सकता"। यदि मैं इसे असाइन नहीं करता हूं, तो यह इसके बजाय "वैरिएबल प्रारंभ नहीं किया गया" शिकायत करता है। अगर मैं शुरुआत में स्थैतिक क्षेत्र को आवंटित करता हूं और नक्शे को बाद में अप्रचलित बनाने की कोशिश करता हूं, तो यह शिकायत करता है कि "चर पहले ही असाइन किया जा सकता है"। यह किसी भी चीज़ से खुश नहीं है।
क्या यह भाषा में एक दोष है, या संकलक में एक बग है? कंपाइलर को इसके रूप में करने के लिए स्क्वैश करने का सबसे अच्छा तरीका क्या है?
दो अलग-अलग नामों का उपयोग करें। इस बात का कोई कारण नहीं है कि स्थैतिक ब्लॉक के अंदर 'मानचित्र' को स्थिर 'मानचित्र' फ़ील्ड के समान नाम होना चाहिए। – ajb
नामकरण काम करता है, लेकिन यह बदसूरत है, क्योंकि मैं प्रारंभकर्ता ब्लॉक में कई बार चर का उपयोग करता हूं, और वे उनके उचित नामों के साथ अधिक सार्थक होंगे। मैं सोच रहा था कि क्या कुछ बेहतर था। – Boann