जावा में मान्य @SuppressWarnings चेतावनी नामों की सूची क्या है?


264

@SuppressWarningsजावा में मान्य चेतावनी नामों की सूची क्या है ?

वह बिट जो भीतर आता ("")है @SuppressWarnings("")


3
यह प्रश्न वास्तव में अच्छा है और उत्तर उपयोगी हैं। यदि JCP का कोई व्यक्ति इसे देखता है, तो आपको यह महसूस करना चाहिए कि दबाने की चेतावनी को जोड़ना कितना गड़बड़ है। मामला, हाइफन, ऊंट मामले पर कोई सम्मेलन नहीं है, यह सिर्फ एक सादे गड़बड़ है, इसे मानकीकृत करना प्यारा होगा।
Snicolas

मैं "ProhibitedExceptionDeclared"ग्रहण संग्रह फ्रेमवर्क ( org.eclipse.collections.impl.block.function.checked.ThrowingFunction) के भीतर देखता हूं , और यह नीचे सूचीबद्ध नहीं है।
केविनरपे

जवाबों:


250

यह आपके आईडीई या कंपाइलर पर निर्भर करता है।

यहाँ ग्रहण गैलीलियो के लिए एक सूची दी गई है :

  • सभी चेतावनियों को दबाने के लिए
  • बॉक्सिंग / अनबॉक्सिंग ऑपरेशंस के सापेक्ष चेतावनी को दबाने के लिए बॉक्सिंग
  • कास्ट ऑपरेशन के सापेक्ष चेतावनियों को दबाने के लिए
  • पदावनत एनोटेशन के सापेक्ष चेतावनियों को दबाने के लिए डिप-एन
  • पदावनत के सापेक्ष चेतावनियों को दबाने के लिए पदावनति
  • fallthrough को दबाने के लिए चेतावनी स्विच बयान में लापता टूट जाता है के सापेक्ष
  • अंत में अंत में वापस नहीं आने वाले ब्लॉक के सापेक्ष चेतावनियों को दबाने के लिए
  • छुपा स्थानीय लोगों कि के सापेक्ष दबाने चेतावनी को चर छिपाने
  • अधूरा-स्विच एक स्विच स्टेटमेंट (एनम केस) में गुम प्रविष्टियों के सापेक्ष चेतावनी को दबाने के लिए
  • नेल्स नॉन-नेल्स स्ट्रिंग शाब्दिक के सापेक्ष चेतावनी को दबाने के लिए
  • अशक्त विश्लेषण के सापेक्ष चेतावनी को दबाने के लिए अशक्त
  • हतोत्साहित या निषिद्ध संदर्भों के उपयोग के सापेक्ष चेतावनी को दबाने के लिए प्रतिबंध
  • क्रमिक श्रेणी के लिए लापता serialVersionUID फ़ील्ड के सापेक्ष चेतावनी को दबाने के लिए धारावाहिक
  • स्टेटिक-एक्सेस गलत स्टेटिक एक्सेस के सापेक्ष चेतावनी को दबाने के लिए
  • आंतरिक कक्षाओं से अनधिकृत पहुंच के सापेक्ष चेतावनी को दबाने के लिए सिंथेटिक-पहुंच
  • अनियंत्रित संचालन के सापेक्ष चेतावनियों को दबाने के लिए अनियंत्रित
  • अयोग्य घोषित करने के क्षेत्र के सापेक्ष चेतावनियों को दबाने के लिए अयोग्य-क्षेत्र-पहुंच
  • अप्रयुक्त कोड के सापेक्ष चेतावनियों को दबाने के लिए अप्रयुक्त

इंडिगो के लिए सूची में शामिल हैं:

  • जावाडॉक चेतावनी के सापेक्ष चेतावनी को दबाने के लिए
  • कच्चे माल के उपयोग के सापेक्ष चेतावनियों को दबाने के लिए रॉटाइप्स
  • स्टेटिक-मेथड को स्टैटिक घोषित करने के तरीकों के सापेक्ष चेतावनी को दबाने की विधि
  • सुपर इनवॉइस के बिना एक विधि को ओवरराइड करने के सापेक्ष चेतावनियों को दबाने के लिए सुपर

जूनो सूची के लिए कहते हैं:

  • संसाधन दबाने चेतावनियों के प्रकार closeable के संसाधनों के उपयोग के सापेक्ष
  • सिंक्रनाइज़ेशन विधि को ओवरराइड करते समय अनुपलब्ध सिंक्रनाइज़ेशन के कारण सिंक-ओवरराइड चेतावनी को दबाने के लिए

केप्लर और लूना जूनो ( सूची ) के समान टोकन सूची का उपयोग करते हैं ।

अन्य समान होंगे, लेकिन अलग-अलग होंगे।


किन मामलों में एक अशक्त चेतावनी को दबा देना उपयोगी होगा?
जेसी जशिंस्की

@ जेसे: जब कंपाइलर गलत हो (यानी "" स्टूपिड फ्लैंडर्स की चेतावनी ")। संकलन का प्रयास करें: void foo( Object o ) { boolean b; if ( ( b = o == null ) ) o = new Object(); o.toString(); }। कुछ वातावरण (जैसे NetBeans 7.3 w / Java 6 JDK [1.6.0_41]) कॉल "o possibly null"पर उत्पन्न करेगा o.toString()भले ही oउस बिंदु पर शून्य न हो।
बराबर

2
@ क्लेटस: क्या ग्रहण में प्रकार की चेतावनियों को जोड़ना संभव है? समस्या यह है कि हमारी टीम का एक सदस्य IntelliJ का उपयोग करता है, और उस IDE में अन्य दबाने वाले चेतावनी प्रकार हैं जो ग्रहण में चेतावनी देते हैं :) ग्रहण इंडिगो में आप वरीयताओं में सेट कर सकते हैं: अप्रयुक्त SuppressWarnings टोकन को अनदेखा करें, लेकिन यह काम नहीं करता है ...
केसी

semicolonलूना में काम नहीं लगता है? :( Can किसी सत्यापित करें कि क्या semicolonवास्तव में मान्य है?
Kissaki

"गैर-अंतिम फ़ील्ड पर सिंक्रनाइज़ेशन" चेतावनी को दबाने के लिए मूल्य क्या है?
मैटो

48

सभी मूल्यों की अनुमति है (गैर-मान्यता प्राप्त लोगों को अनदेखा किया जाता है)। मान्यता प्राप्त लोगों की सूची संकलक विशिष्ट है।

में जावा ट्यूटोरियल unchecked और deprecationजावा भाषा विशिष्टता के लिए आवश्यक दो चेतावनी के रूप में सूचीबद्ध किया गया है, इसलिए, वे मान्य सभी compilers के साथ किया जाना चाहिए:

प्रत्येक संकलक चेतावनी एक श्रेणी से संबंधित है। जावा लैंग्वेज स्पेसिफिकेशन दो श्रेणियों को सूचीबद्ध करता है: पदावनति और अनियंत्रित।

जावा लैंग्वेज स्पेसिफिकेशन के अंदर के विशिष्ट खंड जहाँ उन्हें परिभाषित किया गया है, वह संस्करणों के अनुरूप नहीं है। जावा एसई 8 विनिर्देश में uncheckedऔर 9.6.4.5deprecation खंडों में संकलक चेतावनी के रूप में सूचीबद्ध हैं । @SuppressWarnings और 9.6.4.6 @Deprecated , क्रमशः।

सन के कंपाइलर के लिए, रनिंग javac -Xउस संस्करण द्वारा मान्यता प्राप्त सभी मूल्यों की एक सूची देता है। 1.5.0_17 के लिए, सूची प्रतीत होती है:

  • सब
  • प्रतिवाद
  • अनियंत्रित
  • असफल
  • पथ
  • धारावाहिक
  • आखिरकार

43

सूची संकलक विशिष्ट है। लेकिन यहाँ ग्रहण में समर्थित मूल्य दिए गए हैं :

  • AllDeprecation पदावनत कोड के अंदर भी वेतन वृद्धि
  • allJavadoc अमान्य या अनुपलब्ध javadoc
  • assertIdentifier पहचानकर्ता के रूप में उपयोग की जाने वाली घटना की घटना
  • बॉक्सिंग ऑटोबॉक्सिंग रूपांतरण
  • charConcat जब एक स्ट्रिंग सरणी को स्पष्ट रूप से एक स्ट्रिंग में बदलने के बिना एक स्ट्रिंग संयोजन में उपयोग किया जाता है
  • सशर्त आकस्मिक बूलियन असाइनमेंट संभव है
  • कंस्ट्रक्टर नाम के साथ constructorName विधि
  • dep-ann लापता @Deprecated एनोटेशन
  • पदावनत कोड के बाहर वंचित प्रकार या सदस्य का उपयोग
  • हतोत्साहित एक्सेस नियम से मेल खाने वाले प्रकारों का हतोत्साहित उपयोग
  • emptyBlock खाली ब्लॉक undocumented
  • enumSwitch , अधूरा-स्विच अधूरा enum स्विच
  • fallthrough संभव fallthrough मामले
  • फ़ील्डहाइडिंग फ़ील्ड दूसरे चर को छुपाता है
  • finalBound अंतिम बाध्य साथ प्रकार पैरामीटर
  • अंत में सामान्य रूप से पूरा नहीं होने पर अंततः ब्लॉक करें
  • निषिद्ध पहुँच नियम से मेल खाने वाले प्रकारों का निषिद्ध उपयोग
  • छुपा fieldHiding, localHiding, typeHiding और maskedCatchBlock के लिए मैक्रो
  • अप्रत्यक्ष स्थैतिक सदस्य का अप्रत्यक्ष अप्रत्यक्ष संदर्भ
  • intfAnnotation एनोटेशन प्रकार का उपयोग सुपर इंटरफ़ेस के रूप में किया जाता है
  • intfNonInherited इंटरफ़ेस गैर-विरासत विधि संगतता
  • javadoc अमान्य javadoc
  • localHiding स्थानीय चर किसी अन्य चर को छुपाता है
  • नकाबपोश कैचब्लॉक छिपे हुए कैच ब्लॉक
  • नेल्स नॉन-नेल्स स्ट्रिंग शाब्दिक (टैग की कमी // $ NON-NLS-)
  • कोई प्रभाव के साथ noEffectAssign असाइनमेंट
  • अशक्त संभावित लापता या निरर्थक अशक्त जाँच
  • nullDereference गायब नल जाँच
  • ओवर-एन गुम @Override एनोटेशन
  • paramAssign एक पैरामीटर के लिए काम
  • pkgDefaultMethod पैकेज-डिफ़ॉल्ट विधि को ओवरराइड करने का प्रयास करता है
  • कच्चे प्रकार का कच्चा उपयोग (पैरामीरिज्ड प्रकार के बजाय)
  • अर्धविराम अनावश्यक अर्धविराम या रिक्त कथन
  • सीरियल लापता सीरियलवर्जनयूआईडी
  • specialParamHiding कंस्ट्रक्टर या सेटर पैरामीटर किसी अन्य फ़ील्ड को छुपाता है
  • अप्रत्यक्ष और स्थैतिक के लिए स्थैतिक-अभिगम स्थैतिक
  • staticReceiver यदि एक गैर स्थिर रिसीवर का उपयोग किसी स्थिर क्षेत्र को प्राप्त करने के लिए किया जाता है या किसी स्थिर विधि को कॉल करने के लिए किया जाता है
  • सुपर एक सुपर मंगलाचरण किए बिना एक विधि अधिभावी
  • suppress enable @SuppressWarnings सक्षम करें
  • सिंथेटिक- सक्सेस, इंटरनल -एक्सेस का उपयोग करते समय इनरक्लास के लिए सिंथेटिक एक्सेस करना
  • कार्य स्रोत कोड में कार्य टैग के लिए समर्थन सक्षम
  • टाइपिंग टाइप पैरामीटर दूसरे प्रकार को छुपाता है
  • अनियंत्रित अनियंत्रित प्रकार ऑपरेशन
  • अनावश्यक अन्य अनावश्यक खंड
  • अयोग्य-फ़ील्ड-पहुँच, अयोग्य-फ़ील्ड के लिए अयोग्य संदर्भ
  • अप्रयुक्त मैक्रो के लिए अप्रयुक्त मैक्रो, अप्रयुक्त आईपोर्ट, अप्रयुक्त लेलबेल, अप्रयुक्त, अप्रयुक्तप्राकृतिक और अप्रयुक्तहोटल
  • unusedArgument अप्रयुक्त विधि तर्क
  • unusedImport अप्रयुक्त आयात संदर्भ
  • unusedLabel अप्रयुक्त लेबल
  • unusedLocal प्रयोग न की जा चर
  • unusedPrivate अप्रयुक्त निजी सदस्य घोषणा
  • unusedThrown अप्रयुक्त घोषित फेंका अपवाद
  • बेकार बेकार / कच्चा ऑपरेशन
  • varargsCast varargs तर्क में स्पष्ट कलाकारों की आवश्यकता होती है
  • warningToken @SuppressWarnings में टोकन चेतावनी बिना क्रिया

सन JDK (1.6) में समर्थित चेतावनी की एक छोटी सूची है:

  • मूल्यह्रास आइटमों के उपयोग के लिए मूल्य- निर्धारण की जाँच करें।
  • अनियंत्रित जावा भाषा विनिर्देश द्वारा अनियंत्रित रूपांतरण चेतावनियों के लिए अधिक विवरण दें।
  • क्रमिक कक्षाओं पर क्रमिक रूप से अनुपलब्ध सीरियलवर्सन की परिभाषा के बारे में चेतावनी।
  • अंत में इस बारे में चेतावनी दें कि आखिरकार क्लॉस सामान्य रूप से पूरा नहीं हो सकता है।
  • fallthrough fallthrough मामलों के लिए स्विच ब्लॉक की जाँच करें और किसी भी है कि पाए जाते हैं के लिए एक चेतावनी संदेश प्रदान करते हैं।
  • पथ पर्यावरण के पथों (जैसे कि क्लासपाथ) में एक भी नहीं के लिए जाँच करें।

मैक के लिए नवीनतम उपलब्ध जेवैक (1.6.0_13) में निम्नलिखित समर्थित चेतावनी है

  • सब
  • डाली
  • प्रतिवाद
  • divzero
  • खाली
  • अनियंत्रित
  • असफल
  • पथ
  • धारावाहिक
  • आखिरकार
  • ओवरराइड

यहाँ ग्रहण सूची संकलक झंडे की लगती है न कि सप्रेसवर्निंग एनोटेशन की (डॉक के अंतिम भाग को आपस में जोड़ने की)।
रॉन टफिन

3
वे दोनों। संकलक झंडे सेट करके आप संकलक को बताते हैं कि आपको किस तरह की चेतावनी चाहिए। एनोटेशन के साथ आप अपने कोड में विशिष्ट स्थानों पर इन चेतावनियों को दबा सकते हैं।
D. व्रॉब्ल्वस्की

मुझे लगता है कि सूची ग्रहण के लिए कम है। नवीनतम गैलिलियो डॉक्स देखें, सुपर्वर्विंग्स के लिए उपलब्ध टोकन की सूची वहां स्पष्ट है: help.eclipse.org/galileo/index.jsp?topic=/…
पीटर ibtibraný

2
मैंने ग्रहण 3.5 में @SuppressWarnings ("कच्चा") आज़माया और यह काम नहीं करता है - मुझे चेतावनी मिलती है कि यह "कच्चा" इस एनोटेशन के लिए एक वैध मूल्य नहीं है।
जेसपर

मैं भी। Unfortunatel कि jsp सपोर्ट उतना नहीं है जितना java सपोर्ट है।
स्टु

9

मेरे लिए एक नया पसंदीदा @SuppressWarnings("WeakerAccess")इंटेलीज में है, जो इसे शिकायत करने से रखता है जब यह सोचता है कि आपके पास उपयोग करने की तुलना में कमजोर पहुंच संशोधक होना चाहिए। हमें परीक्षण का समर्थन करने के लिए कुछ तरीकों के लिए सार्वजनिक उपयोग करना होगा, और @VisibleForTestingएनोटेशन चेतावनियों को नहीं रोकता है।

ETA: "बेनामी" टिप्पणी की, पेज @MattCampbell से जुड़ा, निम्नलिखित अविश्वसनीय रूप से उपयोगी नोट:

आपको इस सूची का उपयोग उस उद्देश्य के लिए नहीं करना चाहिए जिसका आप वर्णन कर रहे हैं। यदि आप इसे पूछते हैं, तो IntelliJ आपके लिए उन SuppressWarnings को स्वचालित रूप से जोड़ देगा। यह मुझे याद है के रूप में कई रिलीज के लिए ऐसा करने में सक्षम है।

बस उस स्थान पर जाएं जहां आपके पास चेतावनी है और Alt-Enter टाइप करें (या यदि आप इसे देख रहे हैं तो निरीक्षण सूची में इसे चुनें)। जब मेनू ऊपर आता है, तो चेतावनी दिखाते हुए और आपके लिए इसे ठीक करने की पेशकश करता है (जैसे यदि चेतावनी "विधि स्थिर हो सकती है" तो "स्टैटिक बनाएं" आपके लिए इसे ठीक करने के लिए IntellJ की पेशकश है), "दर्ज करें" का चयन करने के बजाय, " बस सबमेनू तक पहुंचने के लिए सही तीर बटन का उपयोग करें, जिसमें "निरीक्षण प्रोफ़ाइल सेटिंग संपादित करें" और इसके बाद जैसे विकल्प होंगे। इस सूची के निचले भाग में "क्लास के लिए सभी निरीक्षणों को दबाएं", "क्लास के लिए दबाएं", "विधि के लिए दबाएं", और कभी-कभी "कथन के लिए दबाएं" जैसे विकल्प होंगे। आप संभवत: इनमें से जो भी सूची में अंतिम रूप से प्रकट होता है। इनमें से किसी एक का चयन करने से आपके कोड में @SuppressWarnings एनोटेशन (या कुछ मामलों में टिप्पणी) जुड़ जाएगी, जिससे प्रश्न में चेतावनी को दबा दिया जाएगा। आपको यह अनुमान लगाने की आवश्यकता नहीं होगी कि किस एनोटेशन को जोड़ना है, क्योंकि इंटेलीजे आपके द्वारा चुनी गई चेतावनी के आधार पर चयन करेगा।


2

मैंने देखा कि IntelliJ//noinspection में ऑटो-जनरेट किया जा सकता है

  • सुनिश्चित करें कि आपके पास @SuppressWarninigsबयान से पहले ही कोई योजना नहीं है
  • अब आप विशिष्ट ऑटो उत्पन्न कर सकते हैं //noinspectionमारकर Alt + Enter जब आप चेतावनी चयनित और उसके बाद का उपयोग सही तीर कुंजी को देखने के लिए के लिए ... दबाने विकल्प

अंत में जब मैं IntelliJ से "स्विच में बहुत कम केस लेबल है" चेतावनी को दबाना चाहता था। मुझे IntelliJ के @SuppressWarningसमर्थन के लिए पूरी सूची नहीं //noinspectionमिली, लेकिन मेरे लिए चाल चली गई ।


आप उस के लिए @SuppressWarnings ("SwitchStatementWithTooFewBranches") जोड़ सकते हैं।
जेपीएम

दुर्भाग्य से ALT + ENTER पर क्लिक करने पर विकल्प ... हमेशा उपलब्ध नहीं होता है
दोषपूर्ण

//noinspection SwitchStatementWithTooFewBranchesपहले switchअच्छी तरह से मेरे लिए के रूप में काम करता है।
ओलिवर हॉसलर

1

और यह एक बहुत अधिक संपूर्ण सूची प्रतीत होती है, जहाँ मुझे Android-Studio के लिए कुछ चेतावनियाँ मिलीं, जो मुझे कहीं और नहीं मिलेंगी (जैसे SynchronizeOnNonFinalField)

https://jazzy.id.au/2008/10/30/list_of_suppresswarnings_arguments.html

ओह, अब SO के दिशानिर्देशों ने SO के प्रतिबंधों का खंडन किया। एक तरफ, मैं केवल लिंक प्रदान करने के बजाय सूची की प्रतिलिपि बनाने वाला हूं। लेकिन दूसरी ओर, यह अधिकतम स्वीकार्य वर्णों से अधिक होगा। तो चलो बस आशा करते हैं कि लिंक नहीं टूटेगा।


1

जेएसएल 1.7

Oracle दस्तावेज़ में उल्लेख है:

  • unchecked: अनियंत्रित चेतावनियाँ "अनियंत्रित" स्ट्रिंग द्वारा पहचानी जाती हैं।
  • deprecationएक जावा कंपाइलर को एक प्रकार, विधि, क्षेत्र, या कंस्ट्रक्टर के अनावरण चेतावनी का उत्पादन करना चाहिए, जिसकी घोषणा एनोटेशन के साथ एनोटेट की जाती है @Deprecated का उपयोग किया जाता है (जब नाम से ओवरराइड किया गया, आह्वान या संदर्भित किया जाता है), जब तक: [...] उपयोग एक इकाई के भीतर है जो एनोटेशन @SuppressWarnings ("अपचयन") के साथ चेतावनी को दबाने के लिए एनोटेट किया गया है; या

यह तब बताता है कि कार्यान्वयन अपने स्वयं के जोड़ सकते हैं और दस्तावेज कर सकते हैं:

कंपाइलर विक्रेताओं को इस एनोटेशन प्रकार के साथ मिलकर चेतावनी के नामों का दस्तावेजीकरण करना चाहिए। विक्रेताओं को यह सुनिश्चित करने के लिए सहयोग करने के लिए प्रोत्साहित किया जाता है कि एक ही नाम कई संकलक में काम करते हैं।


1
यह सच नहीं है कि uncheckedमानक द्वारा केवल एक ही समर्थन किया जाता है; एक आप उद्धृत से बहुत अगले भाग का कहना है प्रतिवाद चेतावनी का उत्पादन नहीं किया जाना चाहिए जब "उपयोग एक इकाई है कि टिप्पणी के साथ चेतावनी को दबाने के लिए टिप्पणी की जाती है के भीतर है @SuppressWarnings("deprecation")"
kbolino

1

मैं सिर्फ यह जोड़ना चाहता हूं कि IntelliJ की एक मास्टर सूची है, जिसमें पैरामीटर हैं: https://gist.github.com/vegaasen/157fbc6dce8545b7f12c

यह काफी व्यापक दिखता है। आंशिक:

Warning Description - Warning Name

"Magic character" MagicCharacter 
"Magic number" MagicNumber 
'Comparator.compare()' method does not use parameter ComparatorMethodParameterNotUsed 
'Connection.prepare*()' call with non-constant string JDBCPrepareStatementWithNonConstantString 
'Iterator.hasNext()' which calls 'next()' IteratorHasNextCallsIteratorNext 
'Iterator.next()' which can't throw 'NoSuchElementException' IteratorNextCanNotThrowNoSuchElementException 
'Statement.execute()' call with non-constant string JDBCExecuteWithNonConstantString 
'String.equals("")' StringEqualsEmptyString 
'StringBuffer' may be 'StringBuilder' (JDK 5.0 only) StringBufferMayBeStringBuilder 
'StringBuffer.toString()' in concatenation StringBufferToStringInConcatenation 
'assert' statement AssertStatement 
'assertEquals()' between objects of inconvertible types AssertEqualsBetweenInconvertibleTypes 
'await()' not in loop AwaitNotInLoop 
'await()' without corresponding 'signal()' AwaitWithoutCorrespondingSignal 
'break' statement BreakStatement 
'break' statement with label BreakStatementWithLabel 
'catch' generic class CatchGenericClass 
'clone()' does not call 'super.clone()' CloneDoesntCallSuperClone

1

यदि आप सोनारलिंट का उपयोग कर रहे हैं, तो विधि के ऊपर या पूरे स्क्वीड स्ट्रिंग को आज़माएँ: @SuppressWarnings ("स्क्वीड: S1172")

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.