Generics 在java中混合泛型和非泛型集合

Generics 在java中混合泛型和非泛型集合,generics,Generics,我面临着混合通用和非通用收藏的困境。 例如: 这是新的Java5/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 }

我面临着混合通用和非通用收藏的困境。 例如: 这是新的Java5/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
}
我知道在运行时我会得到classCastException。 但我想打印列表中的所有元素,即使添加了字符串/狗。
有人能建议我如何实现这一点吗?

当然-您只需要避免编译器为您插入强制转换:

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);
        }
    }
}
import java.util.ArrayList;
导入java.util.List;
公开课考试{
公共静态void main(字符串[]args){
//很好的强类型列表。。。
列表=新的ArrayList();
增加(5);
//现在滥用它。。。
列表原始=列表;
原始。添加(“坏元素”);
//不要使用“整数”部分,有效地。。。
用于(对象x:列表){
系统输出println(x);
}
}
}
现在编译器没有将每个元素强制转换为
整数
,所以我们没事了

但是-如果需要这样做,它表明您的代码基本上有点不完整。您最好修复
Alpha
,以避免将意外项目添加到列表中

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);
        }
    }
}