3

我在混合通用和非通用集合时面临两难境地。例如:这是新的 java 5/6 通用代码。

List<Integer> list = new ArrayList<Integer>();
list.add(5);

Alpha a = new Alpha();
a.insert(list);

for (Integer integer : list) {
System.out.println(integer);      //will get classCastException
}

非通用遗留代码

public class Alpha {
    public void insert(List list) { 
    list.add(new String("50"));
    }
}   

我知道我会在运行时得到 classCastException。但即使在添加字符串/狗之后,我也想打印列表的所有元素。有人可以建议我如何实现这一目标吗?

4

1 回答 1

2

当然 - 你只需要避免编译器为你插入一个演员:

import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        // Nice strongly-typed list...
        List<Integer> list = new ArrayList<Integer>();
        list.add(5);

        // Now abuse it...
        List raw = list;
        raw.add("Bad element");        

        // Don't use the "integer" part, effectively...
        for (Object x : list) {
            System.out.println(x);
        }
    }
}

现在编译器没有将每个元素强制转换为Integer,所以我们没事。

但是- 如果您需要这样做,则表明您的代码从根本上有点损坏。您最好进行修复Alpha以避免将意外项目添加到列表中。

于 2013-02-19T13:43:50.603 回答