gpt4 book ai didi

java - 如何使用 switch case 处理类转换异常?

转载 作者:行者123 更新时间:2023-12-02 02:12:50 25 4
gpt4 key购买 nike

在下面的程序中哪里放置try catch来处理类转换异常?

Class Animal { }
Class Dog extends Animal { }
Class Cat extends Animal { }
Class MainRunner {
public static void main(String args[]) {
System.out.println("Main method started");
Scanner sc = new Scanner(System.in);
System.out.println("Enter the key value");
int key = sc.nextInt();
Animal a = null;
switch (key) {
case 1 : a = new Cat(); break;
case 2 : a = new Dog(); break;
default : System.out.println("invalid choice");
return;
}
Dog d = (Dog)a;
System.out.println("main method ended");
}
}

Cat class 没有进行向下转型,所以当输入键值为 1 时,会抛出 ClasscastException。如何使用try catch来处理?在哪里插入 try catch 以便它得到处理?

最佳答案

是的,正如@Pshemo 提到的;你应该使用instanceof运算符来检查它的实例是否是Dog并相应地初始化它

Dog d=null;
if(a instanceof Dog)
d=(Dog)a;
System.out.println(d);

理想情况下,您不需要沮丧。除非您必须调用子类实现的专门方法。否则应使用接口(interface)/父类方法。

example : a.eat() // eat will be present in animal and will be implemented differently in each sub-class dog and cat.

但是如果你需要例如吠叫;那么你可能需要进行子转换,但是使用instanceof以安全的方式进行

if (a instanceof Dog) ((Dog)a).bark();
else syso("Animal cannot bark");

关于java - 如何使用 switch case 处理类转换异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715701/

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