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("否");
}

}
}

解决方案 »

  1.   

    你声明的是Object[] 即便是只是加入String类型也不能是String[]的类型,编译器没这么智能,谁知道你Object[]里面要加入什么对象
      

  2.   

            Object[] objectArray = listStr.toArray();String[] objectArray = listStr.toArray(new String[0]);
      

  3.   

    猜测下不知道是否正确
    toArray方法里面调用的是array.copyof方法,这里面会新建一个T[]类型对象,T就是List的泛型
    但是编译器编译时把泛型都擦除掉了,新建的类型应该就是Object[]
      

  4.   

    更正下,看完这三段代码就明白了,elementData不是T[]类型,就是Object[]类型,所以最后返回的对象实际是新建的一个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;
        }