import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out; // 静态导入public class Generic_Array_Test {
public static void main(String[] args) {
List<String> listStr = new ArrayList<String>();
listStr.add("Apple");
listStr.add("Windows");
Object[] objectArray = listStr.toArray();
// 实际输出“是”
if (objectArray[0] instanceof String) {
out.println("是");
} else {
out.println("否");
}
// 实际输出“否”
if (objectArray instanceof String[]) {
out.println("是");
} else {
out.println("否");
}
Object[] oA = new String[2];
oA[0] = "Apple";
oA[1] = "Windows";
// 实际输出“是”
if (oA[0] instanceof String) {
out.println("是");
} else {
out.println("否");
}
// 实际输出“是”
if (oA instanceof String[]) {
out.println("是");
} else {
out.println("否");
}
}
}
toArray方法里面调用的是array.copyof方法,这里面会新建一个T[]类型对象,T就是List的泛型
但是编译器编译时把泛型都擦除掉了,新建的类型应该就是Object[]
public Object[] toArray() {
return Arrays.copyOf(elementData, size);
}
public static <T> T[] copyOf(T[] original, int newLength) {
return (T[]) copyOf(original, newLength, original.getClass());
}
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
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;
}