我们最近在代码中遇到了一个与面向对象编程(OOPs)概念相关的错误。
class ABC
{
String a;
ABC(){
a = "abc";
}
}
public class Main {
static Object listABC() {
List<ABC> listOfABC = new ArrayList<>();
listOfABC.add(new ABC());
return listOfABC;
}
public static void main(String[] args) throws java.lang.Exception {
List<Long> listLong = (List) Main.listABC();
System.out.println(listLong.get(0));
}
}
输出: ABC@642c39d2
这不应该引发运行时异常吗?有人能指导我为什么这段代码没有引发异常吗?
Runtime
异常,因为编译器会关注正确的类型。如果在运行时,某些东西是由泛型定义的不同类,则不会有异常,因为List
的泛型类型已不存在。 - SomeJavaGuylistLong.get(0)
赋值给一个Long,你会得到一个ClassCastException。 - Scary Wombat