在java 泛型指南中,有一段关于 转型和instanceof的描述
并且有这样一段代码:
<T> T badCast(T t, Object o) {
         return (T) o; // unchecked warning
  }
指南中说的很清楚
类型参数在运行时并不存在。这意味着它们不会添加任何的时间或者空间上的负担,这很好。不幸的是,这也意味着你不能依靠他们进行类型转换。但,我在jdk1.6的源码ArrayList.java中看到
    public <T> T[] toArray(T[] a) {
        if (a.length < size)
            // Make a new array of a's runtime type, but my contents:
            return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }
其中第一个return语句明显违反了约定,请知道的朋友给指点一下。

解决方案 »

  1.   

    所以这个代码会出unchecked warning
      

  2.   

    谢谢,就是说,jsdk本身也有不安全的代码?
      

  3.   

    看API的说明吧!static <T> T[] 
     copyOf(T[] original, int newLength) 
              复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度。 
    static <T,U> T[] 
     copyOf(U[] original, int newLength, Class<? extends T[]> newType) 
              复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度。