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
, String
aş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: