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

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

membalas semua(4)
伊谢尔伦

(T[]) Arrays.copyOf(elementData, size, a.getClass()); Penukaran paksa boleh berjaya kerana jenis tatasusunan itu sendiri ialah a.getClass().

public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> 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;
}

Objek tatasusunan (jenis sasaran) dibuat melalui Array.newInstance(newType.getComponentType(), newLength).


String[] y = (String[]) x.toArray() tidak boleh dihantar kerana jenis data array ialah Object[] bukannya String[].

伊谢尔伦

String ialah subkelas Object, tetapi String[] bukan subkelas Object[], jadi rujukan kepada String yang jenis sebenar ialah Object boleh dihantar ke String. Walau bagaimanapun, Object[] tidak boleh dipaksa ke dalam String[] Anda hanya boleh menetapkan nilai satu demi satu dan memaksa rujukan di dalam satu demi satu dan kemudian menyalinnya (sudah tentu anda boleh menggunakan Arrays.copyOf() untuk melakukan ini. <.>

伊谢尔伦

Adalah sah untuk menukar nilai subkelas kembali kepada subkelas

Hantar nilai Object[] ke dalam String[], tingkah laku ini serupa dengan (Integer)(new Object())

阿神

Jenis generik ArrayListE tidak diperlukan apabila jenis generik tidak dinyatakan, contohnya:

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

Kaedah kedua tidak boleh digunakan dalam kes ini dan tiada cara untuk melakukan penukaran jenis paksa

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!