जब आप घोषणा करते हैं
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 त्रुटि के इस दूसरे प्रकार का एक अच्छा विवरण के लिए।
संदर्भ: