瓦拉格斯堆积污染:有什么大不了的?
2022-09-02 20:43:03
我正在阅读有关varargs堆污染的文章,我真的不明白varargs或不可再生类型如何对没有通用性就不存在的问题负责。事实上,我可以很容易地更换
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
}
跟
public static void faultyMethod(String... l) {
Object[] objectArray = l; // Valid
objectArray[0] = 42; // ArrayStoreException thrown here
String s = l[0];
}
第二个只是使用数组的协方差,这确实是这里的问题。(即使是可重用的,我想它仍然是 的子类,我仍然能够将任何对象分配给数组。当然,我可以看到两者之间有一点区别,但是无论是否使用泛型,这段代码都是错误的。List<String>
Object
他们所说的堆污染是什么意思(这让我想到了内存使用情况,但他们谈论的唯一问题是潜在的类型不安全性),它与使用数组协方差的任何类型违规有何不同?