আপনি যখন ঘোষণা
public static <T> void foo(List<T>... bar) সংকলক এটিকে রূপান্তর করে
public static <T> void foo(List<T>[] bar) তারপরে
public static void foo(List[] bar)
বিপদটি তখন দেখা দেয় যে আপনি ভুল করে তালিকায় ভুল মান নির্ধারণ করবেন এবং সংকলক কোনও ত্রুটি ট্রিগার করবে না। উদাহরণস্বরূপ, যদি Tহয় Stringতবে নিম্নলিখিত কোডটি ত্রুটি ছাড়াই সংকলন করবে তবে রানটাইমে ব্যর্থ হবে:
// First, strip away the array type (arrays allow this kind of upcasting)
Object[] objectArray = bar;
// Next, insert an element with an incorrect type into the array
objectArray[0] = Arrays.asList(new Integer(42));
// Finally, try accessing the original array. A runtime error will occur
// (ClassCastException due to a casting from Integer to String)
T firstElement = bar[0].get(0);
আপনি যদি এই ধরণের দুর্বলতা না রাখেন তা নিশ্চিত করার জন্য যদি আপনি পদ্ধতিটি পর্যালোচনা করে থাকেন তবে আপনি @SafeVarargsসতর্কতা দমন করার জন্য এটিকে বর্নিত করতে পারেন । ইন্টারফেসের জন্য, ব্যবহার করুন @SuppressWarnings("unchecked")।
যদি আপনি এই ত্রুটি বার্তাটি পান:
ভারার্গস পদ্ধতিটি অ-পুনঃ-সংশোধনযোগ্য ভারার্গস প্যারামিটার থেকে গাদা দূষণের কারণ হতে পারে
এবং আপনি নিশ্চিত যে আপনার ব্যবহার নিরাপদ তবে তার @SuppressWarnings("varargs")পরিবর্তে আপনার ব্যবহার করা উচিত । দেখুন @SafeVarargs এই পদ্ধতি জন্য একটি উপযুক্ত টীকা করা হয়? এবং https://stackoverflow.com/a/14252221/14731এই দ্বিতীয় ধরণের ত্রুটির একটি সুন্দর ব্যাখ্যার জন্য ।
তথ্যসূত্র: