切换类型时应该抛出哪个异常?

  • 本文关键字:异常 类型 java
  • 更新时间 :
  • 英文 :


我有一个类型层次结构,其中类BC继承抽象类A

我有一个像这样的代码块:

if (someVar instanceof B) {
return "b";
} else if(someVar instanceof C) {
return "c";
} else {
throw new Exception("Missing type handling…");
}

我想知道在Java中是否有一个适当的例外,如IllegalArgumentException

IllegalArgumentException很好。

IllegalArgumentException扩展RuntimeException

抛出,表示方法被传递了非法的或不恰当的观点。

坚持你问的问题,IllegalArgumentException是一个很好的例外。

然而,它看起来不像你正确地使用类层次结构。如果BC都扩展A,这是抽象的,那么我认为类A应该有一个抽象方法返回你在if块链中检查的任何内容:

public abstract class A {
public abstract String getHandling(); //<-- or whatever the correct name is
}

这样BC就可以这样写:

public final class B extends A {
@Override
public String getHandling() {
return "b";
}
}
public final class C extends A {
@Override
public String getHandling() {
return "c";
}
}

然后,上面部分显示的函数将声明someVar的类型为A:

public void yourFunction(A someVar) {
return someVar.getHandling();
}

这样,每次有人再次扩展A时,您都不必担心实现新的if

要么是你的新类extends A(在这种情况下,它必须提供处理实现),要么是编译器不接受你的对象参数