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