gpt4 book ai didi

java - 为什么这个列表不抛出 ClassCastException?

转载 作者:行者123 更新时间:2023-11-30 08:17:04 26 4
gpt4 key购买 nike

给定以下类结构:

class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

并且仅在初始化时使用泛型创建列表,而不是在引用上使用泛型:

List dogs = new ArrayList<Dog>();

为什么这段代码没有生成 ClassCastException?

dogs.add(new Cat()); // How is Cat casted to Dog??!
Cat cat = (Cat) dogs.get(0); // Return perfectly valid Cat object.

我知道不会有编译错误,因为 list 引用没有任何泛型,并且会接受任何 Object。但是,为什么当我尝试添加 Cat 对象时 JVM 没有生成任何异常?

最佳答案

你的 dogs变量的类型是 List这是一个原始类型。它不是类型 List<Dog> .

而且由于它是原始类型,您可以向其中添加任何对象。你的Cat实例不会被强制转换为任何东西。

泛型仅提供编译时安全和检查,不在运行时使用。

Java Language Specification 4.8. Raw Types 中阅读有关原始类型的更多信息.

关于java - 为什么这个列表不抛出 ClassCastException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28067618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com