黑马程序员_创建泛型数组的陷阱

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不支持泛型数组引起的错误。

posted on 2012-09-11 14:09  小木の故事  阅读(113)  评论(0)    收藏  举报

导航