Tôi đã đọc khoảng varargs heap pollution và tôi không thực sự nhận được các loại chênh lệch hoặc không thể tái tạo sẽ chịu trách nhiệm về các vấn đề chưa tồn tại mà không có tính tổng quát. Thật vậy, tôi có thể dễ dàng thay thếô nhiễm đống ô nhiễm: thỏa thuận lớn là gì?
public static void faultyMethod(List<String>... l) {
Object[] objectArray = l; // Valid
objectArray[0] = Arrays.asList(42);
String s = l[0].get(0); // ClassCastException thrown here
}
với
public static void faultyMethod(String... l) {
Object[] objectArray = l; // Valid
objectArray[0] = 42; // ArrayStoreException thrown here
String s = l[0];
}
thứ hai chỉ đơn giản là sử dụng các hiệp phương sai của mảng, mà thực sự là vấn đề ở đây. (Ngay cả khi List<String>
có thể được tái tạo, tôi đoán nó vẫn sẽ là một lớp con của Object
và tôi vẫn có thể gán bất kỳ đối tượng nào cho mảng.) Tất nhiên tôi có thể thấy có sự khác biệt nhỏ giữa hai, nhưng mã này bị lỗi cho dù nó sử dụng Generics hay không.
sao họ có ý nghĩa gì bởi đống ô nhiễm (nó làm cho tôi suy nghĩ về việc sử dụng bộ nhớ nhưng vấn đề duy nhất mà họ nói về tiềm năng loại unsafetiness), và làm thế nào là nó khác nhau từ bất kỳ loại vi phạm sử dụng hiệp phương sai mảng?
Câu hỏi hay, cho phép tôi thêm dòng đối tượngArray [0] = 42; là một trong những thực sự ném ArrayStoreException. – Victor