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;
}