JAVA错误:Ljava.lang.Object;无法强制转换为[Ljava.util.ArrayList;

JAVA错误:Ljava.lang.Object;无法强制转换为[Ljava.util.ArrayList;,java,casting,runtime,Java,Casting,Runtime,有人能帮我解释一下为什么下面的代码会出现这个运行时错误吗? (不需要解决方案)谢谢 import java.util.*; GFG类{ 公共静态void main(字符串[]args){ ArrayList[]arr=(ArrayList[])新对象[2]; } } 运行时错误:线程“main”中出现异常 java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为 [Ljava.util.ArrayList;位于GFG.main(File.j

有人能帮我解释一下为什么下面的代码会出现这个运行时错误吗? (不需要解决方案)谢谢

import java.util.*;
GFG类{
公共静态void main(字符串[]args){
ArrayList[]arr=(ArrayList[])新对象[2];
}
}
运行时错误:线程“main”中出现异常 java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为 [Ljava.util.ArrayList;位于GFG.main(File.java:5)


直接从
[ClassCastException][1]
的API规范:

抛出以指示代码已 试图将对象强制转换为 它不是的子类 例如

在您的情况下,您正在向下转换(将
对象
转换为
数组列表
)。每个
数组列表
都是
对象
,但不是每个
对象
都是
数组列表

一般来说,向下投射不是一个好主意。你应该避免它。如果你使用它,最好使用
instanceof
进行检查

Object o = new ArrayList<>();
if (o instanceof ArrayList) {
    ArrayList<String> arr = (ArrayList<String>) o;
}
objecto=newarraylist();
if(o ArrayList的实例){
ArrayList arr=(ArrayList)o;
}

但是对象类对于每个类来说都是一个超类。不是吗?@Abhishek,是的。你好@HarshalParekh,谢谢你的回答。我的问题更多的是关于runtim错误的原因。我看到一些openJDK代码使用了“E[]tmp=(E[])new Object[input.length];”。我不明白为什么其他代码可以正常工作,但我的代码不行您发布的是泛型。它与您的代码不同,因此存在例外。
Object o = new ArrayList<>();
if (o instanceof ArrayList) {
    ArrayList<String> arr = (ArrayList<String>) o;
}