gpt4 book ai didi

java - 为什么 ClassCastException 是运行时错误?

转载 作者:行者123 更新时间:2023-12-02 13:00:31 26 4
gpt4 key购买 nike

尝试以下操作:

class Base {
public Base(){
}
}

class Derived extends Base {
}

public class Main
{
public static void main (String[] args)
{
Derived derived = (Derived) new Base();
}
}

导致 CastClassException,但编译成功this question的评论表明编译器在运行时之前不可能弄清楚 new Base() 的类型 - 但为什么会出现这种情况呢?我知道在 other type systems编译器总是可以推断任何表达式的类型,并且 Java 编译器当然会进行一些类型推断,例如 lambda 表达式。而且,在某些时候,如果要发出正确的字节码,它必须知道 new Base() 的类型。

是否存在理论上的限制阻止 Java 编译器在程序运行之前捕获此问题,或者这是一个实现选择?

最佳答案

public static void main(String[] args) throws Exception {
Derived derived = (Derived) getObject();
}

public static Base getObject() {
if (Math.random() > 0.5) {
return new Base();
} else {
return new Derived();
}
}

现在怎么办?编译器怎么知道?编译器(大部分)仅限于静态信息。对象的类型是动态信息。

关于java - 为什么 ClassCastException 是运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25560659/

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