84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
人生最曼妙的风景,竟是内心的淡定与从容!
(T[]) Arrays.copyOf(elementData, size, a.getClass()); 强转可以成功是因为数组的类型本身就为a.getClass()。
(T[]) Arrays.copyOf(elementData, size, a.getClass());
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; }
透過Array.newInstance(newType.getComponentType(), newLength)建立的(目標類型)陣列物件。
Array.newInstance(newType.getComponentType(), newLength)
String[] y = (String[]) x.toArray()无法强制转换是因为array的数据类型为Object[]而不是String[]。
String[] y = (String[]) x.toArray()
array
Object[]
String[]
String 是 Object 的子类,但是 String[] 不是 Object[] 的子类,所以对于实际类型是 String 的 Object 引用是可以强转成 String 的。但是 Object[] 怎么都不能强转成 String[],只能采用个个赋值的方式,把里面的引用挨个强转再拷贝过来(当然可以用 Arrays.copyOf() 來做這個事情。
String
Object
Arrays.copyOf()
把子類的值轉回子類才是合法的
把Object[]的值cast成String[], 這個行為和(Integer)(new Object())同類
(Integer)(new Object())
ArrayList的泛型E不是必選的,當未指定泛型的時候,例如:
E
ArrayList list = new ArrayList(); list.add("test"); list.add(123); list.add(11.22);
這種情況第二種方法是不適用的,也沒辦法做強制型別轉換
(T[]) Arrays.copyOf(elementData, size, a.getClass());
强转可以成功是因为数组的类型本身就为a.getClass()
。透過
Array.newInstance(newType.getComponentType(), newLength)
建立的(目標類型)陣列物件。String[] y = (String[]) x.toArray()
无法强制转换是因为array
的数据类型为Object[]
而不是String[]
。String
是Object
的子类,但是String[]
不是Object[]
的子类,所以对于实际类型是String
的Object
引用是可以强转成String
的。但是Object[]
怎么都不能强转成String[]
,只能采用个个赋值的方式,把里面的引用挨个强转再拷贝过来(当然可以用Arrays.copyOf()
來做這個事情。把子類的值轉回子類才是合法的
把Object[]的值cast成String[], 這個行為和
(Integer)(new Object())
同類ArrayList的泛型
E
不是必選的,當未指定泛型的時候,例如:這種情況第二種方法是不適用的,也沒辦法做強制型別轉換