84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
人生最曼妙的风景,竟是内心的淡定与从容!
(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
不是必选的,当未指定泛型的时候,例如:这种情况第二种方法是不适用的,也没办法做强制类型转换