Beyan ettiğinde
public static <T> void foo(List<T>... bar) derleyici onu
public static <T> void foo(List<T>[] bar) sonra
public static void foo(List[] bar)
Tehlike daha sonra listeye yanlışlıkla yanlış değerler atamanız ve derleyicinin herhangi bir hatayı tetiklememesi nedeniyle ortaya çıkar. Örneğin, bir ise T, Stringaşağıdaki kod hatasız olarak derlenir ancak çalışma zamanında başarısız olur:
// 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);
Bu tür güvenlik açıkları içermediğinden emin olmak için yöntemi incelediyseniz @SafeVarargs, uyarıyı bastırmak için ek açıklama ekleyebilirsiniz . Arayüzler için kullanın @SuppressWarnings("unchecked").
Bu hata mesajını alırsanız:
Varargs yöntemi, yeniden kullanılamayan varargs parametresinden yığın kirliliğine neden olabilir
ve kullanımınızın güvenli olduğundan eminseniz, @SuppressWarnings("varargs")bunun yerine kullanmalısınız . Bkz. @SafeVarargs bu yöntem için uygun bir ek açıklama mı? ve bu ikinci tür hatanın güzel bir açıklaması için https://stackoverflow.com/a/14252221/14731 adresini ziyaret edin .
Referanslar: