2015-05-26 12 views
6

मैं एक साधारण काउंटर श्रेणी का निर्माण:सामग्री अद्यतन कभी नहीं चेतावनी

public class Counter<T> extends HashMap<T, Long> { 
    public Counter() { 
    } 

    public void increase(T key) { 
     put(key, getOrDefault(key, 0l) + 1); 
    } 
} 

मेरे कोड में, मैं वृद्धि() विधि कॉल और फिर डेटा, उदा तक पहुँचने के लिए मानचित्र विधि का उपयोग

Counter<Integer> counter = new Counter<>(); 
    for (Integer i: ... some collection ...) 
     counter.increase(i); 

Intellij चेतावनी रंग के साथ counter (पिछले स्निपेट में पहली पंक्ति) की घोषणा पर प्रकाश डाला गया है, और टूलटिप संदेश दर्शाता है

संग्रह की सामग्री पूछे हैं, लेकिन अद्यतन कभी नहीं।

जाहिर है, मैं केवल इस चेतावनी को अनदेखा कर सकता हूं, लेकिन इंटेलिज को मनाने के लिए कोई तरीका है मेरे कोड के साथ कुछ भी गलत नहीं है?

मैं 14.0.2 समुदाय संस्करण का उपयोग कर रहा हूं।

+1

इंटेलिज चेतावनी संदेश संग्रह निर्दिष्ट करता है, क्या यह संभव है कि यह किसी अन्य संग्रह के बारे में बात कर रहा हो, काउंटर नहीं (जो मानचित्र को विस्तारित करता है जो संग्रह नहीं है ...) –

+0

चेतावनी उस चर पर है। क्षमा करें, मेरा प्रश्न शायद शुरू करने के लिए पर्याप्त स्पष्ट नहीं हो सकता है। मैंने उम्मीद में संपादित किया कि यह अब स्पष्ट है। – daphshez

+0

तो कोड की हाइलाइट की गई पंक्ति कहां है? –

उत्तर

6

इंटेलिजे आईडीईए को यह एहसास नहीं है कि वृद्धि() विधि मानचित्र को अपडेट करती है, क्योंकि यह मानक मानचित्र API का हिस्सा नहीं है। चेतावनी को हटाने के लिए, आप निरीक्षण को दबा सकते हैं।

हालांकि, एक बेहतर डिज़ाइन आपके काउंटर क्लास को विस्तारित करने के बजाय हैश मैप को समाहित करना होगा। यह सुनिश्चित करेगा कि आपकी कक्षा के उपयोगकर्ता केवल उपयुक्त एपीआई को कॉल करेंगे, और सीधे() या अन्य संशोधन विधियों को कॉल करके अपने डेटा को दूषित नहीं करेंगे।

+0

सलाह के लिए धन्यवाद। मेरे परिदृश्य में, यदि वे पसंद करते हैं तो मुझे हैश मैप तक पहुंचने वाले उपयोगकर्ताओं के साथ सहज महसूस होता है, और मुझे बहुत अधिक रुचि नहीं है और कई विधियों को लिखना है जो केवल प्रतिनिधि हैं :-) – daphshez

+0

क्या इस निरीक्षण से निपटने के लिए कोई @SuppressWarning तर्क है? – Sebastian

+0

हां। आप किसी भी निरीक्षण हाइलाइट पर Alt-Enter दबा सकते हैं और मेनू से दबाने की क्रिया का चयन कर सकते हैं। – yole

2

आप इसे अनदेखा करने के लिए @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") जोड़ सकते हैं।

संबंधित मुद्दे