黑马程序员_创建泛型数组的陷阱
JDK 虽然支持泛型,但不允许创建泛型数组。假设Java能支持创建List<String>[10]这样的泛型数组对象,则可以产生如下代码。
public class Test
{
public static void main(String[] args){
//下面代码实际上是不被允许的
List<String>[] lsa=new List<String>[10];
//向上转换为一个object数组
List[]oa=las;
//创建一个List集合
List<Integer> li=new ArrayList<Integer>();
li.add(new Integer(3));
//将list<Integer>对象作为oa的第二个元素
//下面代码没有任何警告
oa[1]=li;
//下面代码也不会有任会警告,但是将引起ClassCastException异常
String s=lsa[1].get(0); //1
}
}
在上面代码中,如果粗体字行代码是合法的,经过中间的系列程序运行,势必在1行代码运行异常,这就违背了java泛型的设计原则:如果这段代码在编译时系统没有产生“[unchecked]未经检查的转换” 警告,这程序在运行时不会引发“ClassCastException”异常。
实际上,编译上面程序将在粗体至代码提示“创建泛型数组”的错误,这正式由Java不支持泛型数组引起的错误。
浙公网安备 33010602011771号