दमन जावा में आयात चेतावनी को दबा दिया


111

जावा में, यदि आप एक वंचित वर्ग आयात करते हैं:

import SomeDeprecatedClass;

आपको यह चेतावनी मिलती है: The type SomeDeprecatedClass is deprecated

क्या इस चेतावनी को दबाने का कोई तरीका है?


4
हाँ यह आदर्श होगा, लेकिन इस मामले में मैं Hadoop के लिए एक पुस्तकालय का उपयोग कर रहा हूं जो कि इसके एपीआई के एक हिस्से का उपयोग करता है जिसे हाल ही में पदावनत किया गया था, इसलिए मेरे पास वास्तव में कोई विकल्प नहीं है यदि मैं इस पुस्तकालय का उपयोग करना चाहता हूं। इसके अलावा यह सिर्फ एक स्कूल परियोजना के लिए है, कुछ भी नहीं जिसे बनाए रखने की आवश्यकता होगी।
एड मजूर

जवाबों:


129

अपनी कक्षा या विधि पर इस एनोटेशन का उपयोग करें:

@SuppressWarnings( "deprecation" )

29
क्या यह आयात के साथ काम करता है? मैंने उस एनोटेशन का उपयोग विधियों और इस तरह से किया है, लेकिन यह आयात के साथ पहचाना नहीं लगता है।
एड मजूर

2
वर्ग स्तर पर एनोटेशन का उपयोग करके आयात को भी कवर करना चाहिए। यह मेरे लिए कम से कम ग्रहण (अच्छी तरह से, तर्कसंगत अनुप्रयोग डेवलपर) के भीतर करता है, लेकिन मैं कमांड-लाइन संकलन के दौरान निश्चित नहीं हूं।
क्रेगफॉस्टर 01

20
यह कमांड-लाइन "javac" या चींटी के <javac> कार्य के साथ काम नहीं करता है। न ही -Xlint: -deprecation ध्वज। एक जेवैक बग की तरह लगता है।
आर्ची

1
काम नहीं कर रहा है, तो एक स्थैतिक क्षेत्र और एक स्थानीय सप्रेसवर्निंग्स का हिस्सा है। पूरी तरह से योग्य वर्ग का नाम यहां बेहतर दृष्टिकोण है।
mheinzerling

16
उत्तर शीर्ष पर नहीं होना चाहिए, क्योंकि सवाल "आयात" कथन के बारे में है और फिक्स केवल एक्लिप्स / इंटेलिज के लिए काम करता है (टिप्पणियों के अनुसार ऐसा लगता है), लेकिन सत्य का अंतिम स्रोत जेवैक है जिसके लिए फिक्स काम नहीं करता है। यह जवाब वास्तव में इस सवाल का जवाब देता है: stackoverflow.com/a/20909204/2032701
रुस्लान

179

चेतावनी से बचने के लिए: कक्षा का आयात करें

इसके बजाय पूरी तरह से योग्य वर्ग नाम का उपयोग करें

और इसे यथासंभव कम स्थानों पर उपयोग करें।


15
+1 यह स्वीकृत उत्तर होना चाहिए। इसका लाभ पूरे वर्ग पर पदावनत न करने का है।
k_g

11
यह बेहतर उत्तर है, @SuppressWarningsवर्ग स्तर पर आयात को कवर नहीं करता है
एलेक्स

7
जावा 9 तक यह सबसे अच्छा जवाब है, जहां यह अंततः तय हो गया है: Bugs.openjdk.java.net/browse/JDK-8032211
क्रिस्टोफर

14

हैक के रूप में आप आयात नहीं कर सकते हैं और कोड के अंदर पूरी तरह से योग्य नाम का उपयोग कर सकते हैं।

आप javac -Xlint भी आज़मा सकते हैं: -Deprecation सुनिश्चित नहीं है कि यदि वह इसे संबोधित करेगा।


9

आयात को बदलकर मैंने इसे हल किया:

import package.*

उसके बाद विधि को एनोटेट करते हुए जिसने वर्गों को हटा दिया@SuppressWarnings("deprecation")


पूरे पैकेज से सब कुछ आयात न करें। इसका असर प्रदर्शन पर पड़ेगा। अनावश्यक संकलक सभी कक्षाओं को लोड करेगा, जिसके परिणामस्वरूप गंभीर प्रदर्शन मुद्दा होगा। हमेशा उपयोग करें कि अप्रयुक्त कक्षाएं आपके आयात में मौजूद नहीं हैं।
अरुणदेव

1
यहाँ एक उदाहरण के रूप में एक विश्वकोश का उपयोग करना (हाँ मैंने खुद को दिनांकित किया है) - यदि आप एक ओरंगुटान के बारे में जानकारी की तलाश कर रहे हैं, तो क्या आप सिर्फ 'ओ' पुस्तक को पकड़ते हैं या सभी पुस्तकों को हड़प लेते हैं?
Ascalonian

@ अरुदेव, स्पष्ट होने के लिए, आप क्या कह रहे हैं कि संकलन पूरा होने में अधिक समय ले सकता है, लेकिन रनटाइम पर, निष्पादन के प्रदर्शन पर इसका कोई प्रभाव नहीं पड़ेगा, है ना?
पाउलो

@ पाओलो - जो कहने की कोशिश कर रहा है, वह आयातित वर्गों की उपलब्धता की जांच करेगा, भले ही इसका उपयोग न किया जाए। इसलिए यदि आपके पास बहुत से अप्रयुक्त आयात हैं जिन्हें हटाने के लिए हमेशा बेहतर होता है।
अरुणदेव

7

मान लीजिए कि आप एक पदावनत विधि (जैसे कि getUnicodeStream (String columnLabel) के रूप में java.sql.ResultSet) के साथ एक इंटरफ़ेस को ओवरराइड / लागू कर रहे हैं, तो आप केवल एनोटेशन @SuppressWarnings ("डिप्रेसेशन") का उपयोग करके डिप्रेशन चेतावनी से छुटकारा नहीं पाएंगे। , जब तक कि आप @Deprecated एनोटेशन के साथ एक ही नई विधि एनोटेट नहीं करते हैं। यह तर्कसंगत है, क्योंकि अन्यथा आप इसके इंटरफ़ेस विवरण को ओवरराइड करके एक विधि को "अनपेक्षित" कर सकते हैं।


"@SuppressWarnings" और "@Deprecated" का यह संयोजन आपके अपने तरीके के अंदर हटाए गए तरीकों को कॉल करने के लिए भी काम करता है।
स्वव

1
मैं इतने लंबे समय से उस स्पष्टीकरण की तलाश कर रहा हूं। धन्यवाद!
जाबरी दाश

2

आप उपयोग कर सकते हैं:

javac FileName.java -Xlint: -deprecation

लेकिन फिर यह आपको चेतावनियाँ देगा और आपको उस कोड का हिस्सा भी बताएगा जो पदावनत कर रहा है या पदावनत एपीआई का उपयोग कर रहा है। अब या तो आप इन चेतावनियों के साथ अपना कोड चला सकते हैं या कोड में उचित बदलाव कर सकते हैं।

मेरे मामले में मैं उपयोग कर रहा था someListItem.addItem("red color")जबकि संकलक चाहता था कि मैं उपयोग करूं someListItem.add("red color");

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