मुझे जावा में जेनेरिक-फीचर पसंद है और इसे अक्सर इस्तेमाल करते हैं। लेकिन मुझे एक समस्या है, अगर मैं उन पुस्तकालयों का उपयोग करता हूं जो अभी तक जेनेरिकों के बारे में नहीं जानते हैं। एक उदाहरण servlets हैं। यदि आप ServletRequest.getParameterMap()
का उपयोग करते हैं तो परिणाम कच्चा नक्शा होगा, लेकिन इसमें केवल String
कुंजी और String[]
मान के रूप में शामिल हैं। तो मैं इसे Map<String, String[]>
पर असाइन करना चाहता हूं। लेकिन इस असाइनमेंट के लिए मुझे एक चेतावनी मिलती है। @SuppressWarnings
एनोटेशन के साथ चेतावनी को दबाने से नहीं, मैं भाषा के साथ इस चेतावनी से कैसे बच सकता हूं।यदि आप विरासत पुस्तकालयों का उपयोग करते हैं, तो जावा में अनचेक-रूपांतरण-चेतावनी से कैसे बचें?
उत्तर
जैसा कि अन्य ने कहा है कि उन्हें दबाने के अलावा चेतावनियों से बचा नहीं जा सकता है। मुद्दा आईएमएचओ यह है कि या तो आपको अपने कोड को एनोटेशन के साथ कूड़े रखना होगा जो छोटे दायरे पर लागू होते हैं या उन्हें वैश्विक स्तर पर और जोखिम त्रुटियों को अनदेखा करते हैं।
आईआईआरसी चेतावनी उत्पन्न करने का एक प्रस्ताव है जहां कॉल के बजाय कच्चे प्रकार लौटाए जा रहे हैं।
इस बीच, मुझे लगता है कि सबसे अच्छा तरीका तो यह है कि चेतावनी के एक ही स्थान है, जहां यह उन्हें अनदेखा करने के लिए सुरक्षित है के लिए सीमित हैं एक आवरण विधि का उपयोग करने के लिए है:
class NoWarn {
public static Map<String, String[]> getParameterMap(ServletRequest r)
{
@SuppressWarnings("unchecked")
Map<String, String[]> result = r.getParameterMap();
return result;
}
}
नोट यह जवाब था एक टिप्पणी के साथ संपादित किया गया है कि एनोटेशन विधि निकायों के अंदर नहीं हो सकता है। यह गलत है, उपर्युक्त वाक्य रचनात्मक रूप से सही है। मैंने बदलाव वापस कर दिया है।
मुझे नहीं लगता कि आप कर सकते हैं। चेतावनी तब तक दिखाई देगी जब तक आप इसे दबाएंगे, या इसे अपने आईडीई की चेतावनियों सूची से फ़िल्टर न करें।
मैं भाषा के साथ यह चेतावनी कैसे बच सकते हैं, बस दबा SuppressWarnings-टिप्पणी के साथ चेतावनी से नहीं।
एनोटेशन तरह से भाषा के साथ चेतावनी से बचना है। और कोई रास्ता नहीं है।
सबसे स्वच्छ चीज जो आप कर सकते हैं वह है विरासत से जेनेरिक कोड में रूपांतरण को समाहित करना और केवल चेतावनी को दबा देना।
उदा। आप अपनी विरासत पुस्तकालय पर एक सामान्य मुखौटा डाल सकते हैं, हालांकि यह हमेशा सार्थक नहीं हो सकता है।
+1 विरासत एपीआई के चारों ओर एक बॉयलरप्लेट जेनरेटेड रैपर लिखें और उस पर स्लैप चेतावनी दमन। – skaffman
मुझे एक ही समस्या थी, मैंने बस सभी सामान्य चेतावनियों को बंद कर दिया और मुझे खुश कर दिया :) आप serialVersionUID चेतावनी भी बंद कर सकते हैं क्योंकि कई लोग serialVersionUID का उपयोग नहीं करते हैं।
ग्रहण में - विंडो/संदर्भ/जावा/कंपाइलर/त्रुटियां/चेतावनी और सभी जेनेरिक प्रकार बंद करें।
पीएस कई बुरी चेतावनियां आपको सभी चेतावनियों को अनदेखा करती हैं और कुछ उपयोगी हो सकती हैं।
मैं सुधार के लिए चेतावनी का उपयोग करता हूं। मुझे कई चेतावनियां नहीं मिलती हैं, क्योंकि मैं उन्हें सभी तरह से ठीक करता हूं। आम तौर पर अनचेक-रूपांतरण-चेतावनियां कोड-पार्ट्स को ढूंढने में बहुत उपयोगी होती हैं जिन्हें बेहतर किया जा सकता है। लेकिन इस मामले में मुझे इस चेतावनी को दबाए बिना एक रास्ता नहीं दिख रहा है। – Mnementh
आप भाग्यशाली हैं, अब मेरे पास परियोजना में 61 चेतावनियां हैं, यहां तक कि अप्रयुक्त आयात चेतावनी भी है। मैं इसे ठीक नहीं करूँगा क्योंकि वे मेरे कोड में नहीं हैं, इसलिए मैंने समस्या टैब को बंद कर दिया है और बस मेरे स्रोत कोड में पीले टैग की तलाश की है। – IAdapter
मैं एक ही परियोजना में दूसरों के कोड में भी चेतावनियों को ठीक करता हूं। यदि समस्याएं होती हैं तो हम चेकर्स के नियमों पर चर्चा करते हैं। – Mnementh
जैसा कि अन्य ने कहा, इस चेतावनी से छुटकारा पाने का एकमात्र तरीका इसे दबाना है।
सर्वोत्तम अभ्यास विधियों और वर्गों का उपयोग करके चेतावनी को समाहित करना है।
लेकिन अन्य चेतावनियों के साथ, हमेशा उन समस्याओं को हल करने का प्रयास करें जो उन्हें बना रहे हैं, जैसे अप्रयुक्त आयात और आदि को हटाएं ... यह आपके एप्लिकेशन को दुबला और बेहतर बनाता है।
खुश कोडिंग
इस सवाल पर ठोकर खाई के रूप में मैं भी एक तरह से ऐसे मामलों में दबाने एनोटेशन का उपयोग कर से बचने के लिए यह पता लगाने की कोशिश कर रहा था। मुझे एक और विकल्प मिला जो मैंने सोचा था कि उल्लेखनीय था:
Map<?, ?> map = servletRequest.getParameterMap();
String[] values = (String[]) map.get("key");
हम मूल रूप से वाइल्डकार्ड '?' का उपयोग कर रहे हैं यह इंगित करने के लिए कि मानचित्र में किसी भी प्रकार की कुंजी और मूल्य हो सकता है।
संभावित डाउनसाइड मैं यहां देखता हूं कि हम मान लाने के दौरान एक स्पष्ट कलाकार कर रहे हैं, जो मुझे लगता है कि रनटाइम के दौरान थोड़ा सा प्रदर्शन ओवरहेड होगा।
- 1. आप जावा में रूबी का उपयोग कैसे करते हैं?
- 2. जावा में, यदि आप किसी ऑपरेशन में Double.NaN का उपयोग करते हैं तो क्या होता है?
- 3. यदि आप जावा में क्लोन नहीं करते हैं तो आप क्या करते हैं और आप इसे क्या कहते हैं?
- 4. यदि आप यूएमएल में डिज़ाइन नहीं करते हैं, तो आप किसमें डिज़ाइन करते हैं?
- 5. जब आप अनुवादित पाठ में लिंक करते हैं तो आप गेटटेक्स्ट का उपयोग कैसे करते हैं?
- 6. आप automake में पुस्तकालयों का क्रम कैसे सेट करते हैं?
- 7. जब आप लाइब्रेरी का उपयोग करते हैं तो अब आप क्या करते हैं?
- 8. यदि आप Erlang लाइब्रेरी को इंस्टॉल करना चाहते हैं तो आप क्या उपयोग करते हैं?
- 9. आप जावा लाइब्रेरी का उपयोग कैसे करते हैं?
- 10. आप एक्सकोड में समूहों का उपयोग कैसे करते हैं?
- 11. आप PowerShell का उपयोग कैसे करते हैं?
- 12. यदि आप अनावश्यक हैं तो क्या आप निजी एक्सेस संशोधक का उपयोग कर सकते हैं?
- 13. नेस्टेड से बचें यदि अन्य/स्विच - जावा
- 14. आप CTEST_CUSTOM_PRE_TEST का उपयोग कैसे करते हैं?
- 15. यदि आप Handlebars.js में कस्टम सहायक का प्रीकंपलिंग कर रहे हैं तो आप एक कस्टम सहायक कैसे पंजीकृत करते हैं?
- 16. यदि आप मैक पर टेक्स्टमैट में उपयोग करते हैं, तो आप किस PHP आईडीई का उपयोग विंडोज पर करेंगे?
- 17. जेनिक्स के बिना विरासत कोड का उपयोग करते समय एक्लिप्स चेतावनियों से कैसे बचें?
- 18. यदि आप जावा पृष्ठभूमि के साथ डेवलपर के रूप में अक्सर कोशिश/पकड़/आखिरकार ब्लॉक का उपयोग करते हैं तो
- 19. यदि आप संबंधित__इन के बिना संबंधित_to का उपयोग करते हैं तो क्या होगा?
- 20. आप आईएमई का उपयोग कैसे करते हैं?
- 21. क्या आप बिज़टॉक का उपयोग कर रहे हैं? यदि हां, तो आप इसका उपयोग कैसे कर रहे हैं?
- 22. आप जेएसटीएल का उपयोग कैसे करते हैं?
- 23. तृतीय पक्ष पुस्तकालयों में निजी एपीआई के उपयोग से कैसे बचें और इससे बचें
- 24. आप स्क्वाक का उपयोग कैसे करते हैं?
- 25. यदि आपका कंप्यूटर इंटरनेट से अलग है तो आप फ़ायरबग कैसे इंस्टॉल करते हैं?
- 26. यदि आप एक खाली जावा फ़ाइल संकलित करते हैं तो क्या होता है?
- 27. क्या आप PHP में आरईएसटी का उपयोग कर सकते हैं? यदि हां, तो कैसे?
- 28. जब आप जावा का उपयोग कर सकते हैं तो ज्योथन का उपयोग क्यों करें?
- 29. सी ++ पुस्तकालयों का उपयोग करते समय एक ही कोड सहित कैसे बचें?
- 30. क्या आप दावे का उपयोग करते हैं?
मुझे उम्मीद है कि आपके द्वारा उल्लिखित प्रस्ताव तेजी से लागू किया जाएगा (जावा 7?), क्योंकि इससे मेरी समस्या स्पष्ट रूप से हल हो जाएगी। – Mnementh