Rumah > Soal Jawab > teks badan
伊谢尔伦2017-04-18 10:44:06
(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[]
.
伊谢尔伦2017-04-18 10:44:06
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. <. 🎜>
伊谢尔伦2017-04-18 10:44:06
Adalah sah untuk menukar nilai subkelas kembali kepada subkelas
Hantar nilai Object[] ke dalam String[], tingkah laku ini serupa dengan (Integer)(new Object())
阿神2017-04-18 10:44:06
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