জাভাতে অবহেলিত আমদানির সতর্কতা দমন করুন


111

জাভাতে, আপনি যদি অবহিত শ্রেণি আমদানি করেন:

import SomeDeprecatedClass;

আপনি এই সতর্কতা পান: The type SomeDeprecatedClass is deprecated

এই সতর্কতা দমনের কোন উপায় আছে কি?


4
হ্যাঁ এটি আদর্শ হবে তবে এই ক্ষেত্রে আমি হ্যাডোপের জন্য একটি লাইব্রেরি ব্যবহার করছি যা এর এপিআইয়ের একটি অংশ ব্যবহার করেছে যা সম্প্রতি অবহেলিত ছিল, সুতরাং আমি এই লাইব্রেরিটি ব্যবহার করতে চাইলে আমার কাছে সত্যিই কোনও পছন্দ নেই। প্লাস এটি কেবল একটি স্কুল প্রকল্পের জন্য, এমন কোনও কিছুই নয় যা রক্ষণাবেক্ষণের প্রয়োজন হবে।
এড মাজুর

উত্তর:


129

আপনার ক্লাস বা পদ্ধতিতে এই টীকাটি ব্যবহার করুন:

@SuppressWarnings( "deprecation" )

29
এটি কি আমদানি নিয়ে কাজ করে? আমি সেই পদ্ধতিগুলি এবং এ জাতীয় টীকাটি ব্যবহার করেছি, তবে এটি আমদানির সাথে স্বীকৃত বলে মনে হয় না।
এড মাজুর 21

2
শ্রেণি পর্যায়ে টিকা ব্যবহার করে আমদানিও কভার করা উচিত। এটি আমার জন্য কমপক্ষে Eclipse (ভাল, যুক্তিযুক্ত অ্যাপ্লিকেশন বিকাশকারী) এর মধ্যে এটি করে তবে আমি কমান্ড-লাইন সংকলনের সময় সম্পর্কে নিশ্চিত নই।
ক্রেগফোরস্টার

20
এটি কমান্ড-লাইন "জাভ্যাক" বা পিঁপড়ার <জাভাক> টাস্কের সাথে কাজ করছে বলে মনে হচ্ছে না। উভয়ই -xlint: -প্রবিধান পতাকা। জাভাক বাগের মতো মনে হচ্ছে।
আর্কি

1
অবচয় যদি স্থির ক্ষেত্র এবং স্থানীয় সাপ্রেস ওয়ার্নিংসের অংশ হয় তবে কাজ করছেন না। পুরোপুরি যোগ্য শ্রেণীর নামটি এখানে আরও ভাল পদ্ধতির বলে মনে হচ্ছে।
6:49 এ মিহেনজারিং

16
উত্তরটি শীর্ষে থাকা উচিত নয়, যেহেতু প্রশ্নটি "আমদানি" বিবৃতি সম্পর্কে এবং এই সমাধানটি কেবল এক্লিপস / ইন্টেলিজের জন্য কাজ করে (মতামত অনুসারে তাই মনে হয়) তবে সত্যের চূড়ান্ত উত্সটি জাভ্যাক যার জন্য স্থির কাজ করে না এই উত্তরটি আসলেই প্রশ্নের উত্তর দেয়: stackoverflow.com/a/20909204/2032701
রুসলান

179

সতর্কতা এড়াতে: ক্লাসটি আমদানি করবেন না

পরিবর্তে সম্পূর্ণ যোগ্যতাসম্পন্ন শ্রেণীর নাম ব্যবহার করুন

এবং এটি যতটা সম্ভব স্থানে ব্যবহার করুন।


15
+1 এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি সম্পূর্ণ শ্রেণীর অবচয়কে দমন না করার সুবিধা রয়েছে।
কে_জি

11
এটি আরও ভাল উত্তর, @SuppressWarningsক্লাস পর্যায়ে আমদানিগুলি কভার করে না
অ্যালেক্স

7
এটি জাভা 9 অবধি সর্বোত্তম উত্তর, যেখানে এটি শেষ পর্যন্ত স্থির করা হয়েছে: বাগস.ওপেনজেডক.জাভা.নেট
ক্রিস্টোফার

14

হ্যাক হিসাবে আপনি আমদানি করতে পারবেন না এবং কোডের অভ্যন্তরে পুরোপুরি যোগ্যতাসম্পন্ন নামটি ব্যবহার করতে পারবেন।

আপনি জাভ্যাক-এক্স্লিন্টও চেষ্টা করতে পারেন: -প্রসারণ এটি নিশ্চিত করে কিনা তা নিশ্চিত নয়।


9

আমি আমদানি এটিতে পরিবর্তন করে সমাধান করেছি:

import package.*

তারপরে সেই পদ্ধতিটি বর্ননা করা হচ্ছে যা অবহেলা শ্রেণীর সাথে ব্যবহৃত হয়েছিল@SuppressWarnings("deprecation")


পুরো প্যাকেজ থেকে সবকিছু আমদানি করবেন না। এটি কার্য সম্পাদনকে প্রভাবিত করবে। অযথা সংকলক সমস্ত ক্লাস লোড করবে গুরুতর পারফরম্যান্স সমস্যা। সর্বদা ব্যবহার করুন যে অব্যবহৃত ক্লাসগুলি আপনার আমদানিতে উপস্থিত নেই।
অরুণদেব

1
উদাহরণ হিসাবে এখানে একটি এনসাইক্লোপিডিয়া ব্যবহার করে (হ্যাঁ আমি নিজেই তারিখ দিয়েছিলাম) - আপনি যদি কোনও অরঙ্গুতান সম্পর্কে তথ্য খুঁজছেন তবে আপনি কেবল 'ও' বইটি ধরেন বা সমস্ত বই দখল করবেন?
Ascalonian

@ অরনদেব, আপনি স্পষ্টতই বলছেন যে সংকলনটি শেষ হতে আরও বেশি সময় লাগতে পারে, কিন্তু রানটাইমের সময়, মৃত্যুদন্ড কার্যকর করার ক্ষেত্রে এর কোনও প্রভাব পড়বে না, তাই না?
পাওলো

@ পাওলো - যা বলতে চাইছে তা বোঝায়, এটি ব্যবহার না করা হলেও আমদানিকৃত শ্রেণীর প্রাপ্যতা যাচাই করবে। সুতরাং আপনার যদি অব্যবহৃত আমদানি প্রচুর থাকে তবে তা সরাতে আরও ভাল।
অরুণদেব

7

মনে করুন আপনি জাভা.এসকিউএলএসএসলিটসেটে অবহিত পদ্ধতি (যেমন getUnicodeStream (স্ট্রিং কলামল্যাবল) এর সাথে একটি ইন্টারফেসকে ওভাররাইড / বাস্তবায়ন করছেন তবে আপনি কেবলমাত্র @ সাপ্রেস ওয়ার্নিংস ("অবচয়") ব্যবহার করে অবমূল্যায়ন সতর্কতা থেকে মুক্তি পাবেন না , যদি না আপনি @ ডেপ্রেসিটেড এন্টোটেশনের সাথে একই নতুন পদ্ধতিটি টিকান। এটি যৌক্তিক, কারণ অন্যথায় আপনি কেবল কোনও পদ্ধতির ইন্টারফেসের বিবরণটিকে ওভাররাইড করে "অদম্য" করতে পারেন।


"@ সাপ্রেস ওয়ার্নিংস" এবং "@ ডেপ্রেসিটেড" এর এই সংমিশ্রণটি আপনার নিজস্ব পদ্ধতির অভ্যন্তরে অবহেলিত পদ্ধতিগুলিকে কল করার জন্যও কাজ করে।
সোয়াভ

1
আমি এতক্ষণ ধরে সেই ব্যাখ্যাটি খুঁজছিলাম। ধন্যবাদ!
জাবারি ড্যাশ

2

তুমি ব্যবহার করতে পার:

জাভাক ফাইলনাম.জভা-এক্সলিন্ট: -ড্রিপ্রেসেশন

তবে তারপরে এটি আপনাকে সতর্কবার্তা দেবে এবং কোডের যে অংশটি অবমূল্যায়ন ঘটছে বা অবহেলিত এপিআই ব্যবহার করছে তা আপনাকে জানিয়ে দেবে। এখন হয় আপনি এই সতর্কতা সহ আপনার কোডটি চালাতে পারেন বা কোডটিতে যথাযথ পরিবর্তন করতে পারেন।

আমার ক্ষেত্রে আমি ব্যবহার করছিলাম someListItem.addItem("red color")যখন সংকলকটি আমাকে ব্যবহার করতে চেয়েছিল someListItem.add("red color");

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.