gpt4 book ai didi

java - 进行强制转换时出现运行时异常

转载 作者:行者123 更新时间:2023-12-01 06:28:41 24 4
gpt4 key购买 nike

我在进行强制转换时遇到运行时异常,如下所示

线程“main”中出现异常 java.lang.ClassCastException:A 无法转换为 B 在Testing.main(Testing.java:5)

public class A {

public void printA()
{
System.out.println("A");
}

}




public class B extends A{

public void printB()
{
System.out.println("B");
}
}

public class Testing {

public static void main(String args[]) {

B b = (B) new A();
b.printA();
}

}

但是为什么这段代码运行良好

因为我们在这里做同样的事情

HttpServletRequest request = (HttpServletRequest) req;

public class LogFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String ipAddress = request.getRemoteAddr();
chain.doFilter(req, res);
}

最佳答案

因为req的实际类型是HttpServletRequest,所以它可以向下转型。

您可以使用 System.out.println(req.getClass());

进行检查

但在您的情况下,由于 new A(),您的实际对象属于 A 类型,因此您无法强制转换B

有效的场景:

A a = new B(); //actual type is B
B b = (B)a;

第二个语句B b = (B)a;是允许的,因为创建对象时的实际类型是B,因为new B (),只是引用类型是A。这就是为什么您可以再次将其强制转换回 B

关于java - 进行强制转换时出现运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20997450/

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