我有一个类型层次结构,其中类B
和C
继承抽象类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
是一个很好的例外。
然而,它看起来不像你正确地使用类层次结构。如果B
和C
都扩展A
,这是抽象的,那么我认为类A应该有一个抽象方法返回你在if
块链中检查的任何内容:
public abstract class A {
public abstract String getHandling(); //<-- or whatever the correct name is
}
这样B
和C
就可以这样写:
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
(在这种情况下,它必须提供处理实现),要么是编译器不接受你的对象参数