泛型 - ArrayList中toArray()为什么不支持强制类型转换?[Java]
黄舟
黄舟 2017-04-18 10:42:06
0
4
538
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua (4)
伊谢尔伦

(T[]) Arrays.copyOf(elementData, size, a.getClass());强转可以成功是因为数组的类型本身就为a.getClass()

public static  T[] copyOf(U[] original, int newLength, Class newType) { @SuppressWarnings("unchecked") T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }

通过Array.newInstance(newType.getComponentType(), newLength)创建的(目标类型)数组对象。


String[] y = (String[]) x.toArray()无法强制转换是因为array的数据类型为Object[]而不是String[]

    伊谢尔伦

    StringObject的子类,但是String[]不是Object[]的子类,所以对于实际类型是StringObject引用是可以强转成String的。但是Object[]怎么都不能强转成String[],只能采用个个赋值的方式,把里面的引用挨个强转再拷贝过来(当然可以用Arrays.copyOf()来做这个事情。

      伊谢尔伦

      子類的值轉回子類才是合法的

      把Object[]的值cast成String[], 這個行為和(Integer)(new Object())同類

        阿神

        ArrayList的泛型E不是必选的,当未指定泛型的时候,例如:

        ArrayList list = new ArrayList(); list.add("test"); list.add(123); list.add(11.22);

        这种情况第二种方法是不适用的,也没办法做强制类型转换

          Muat turun terkini
          Lagi>
          kesan web
          Kod sumber laman web
          Bahan laman web
          Templat hujung hadapan
          Tentang kita Penafian Sitemap
          Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!