这个问题已经在这里有了答案:
我有一个扩展了另一个类的类(在这种情况下,这是一个例外):
public class NewTypeException extends Exception {
private String exceptionField;
public String getExceptionField() {
return exceptionField;
}
public void setExceptionField(String exceptionField) {
this.exceptionField = exceptionField;
}
public NewTypeException(String cause, String reason) {
super(cause);
exceptionField = reason;
}
}
还有另一个类(为方便起见,我们称之为PrintUtil )具有两个具有相似签名的方法,唯一的区别是Exception类型更改为子类:
void doStuff(Exception ex) {
System.out.println(ex.getMessage());
}
void doStuff(NewTypeException ex) {
System.out.println("New Type Exception");
System.out.println(ex.getExceptionField());
System.out.println(ex.getMessage());
}
在我的代码的很多地方,我有一堆
try {
// code
} catch (Exception ex) {
printUtil.doStuff(ex);
}
添加此新的异常类型后,我想让此行根据参数调用最具体的方法。 但是,似乎在我测试此方法时,即使运行时类型适合其他方法(例如NewTypeException),也只会将方法用于Exception 。 除了替换数百个部分之外,是否有其他方法可以做到这一点
try {
// code
} catch (Exception ex) {
printUtil.doStuff(ex);
}
同
try {
// code
} catch (NewTypeException ex) {
printUtil.doStuff(ex);
} catch (Exception ex) {
printUtil.doStuff(ex);
}
? 这似乎是一种真正基本的OOP语言应该可以完成的工作...