说我有
public class A {
public void myMethod() throws Exception {
}
}
public class B extends class A {
}
如果我现在有一个
B
的实例并调用 myMethod()
并抛出异常,则堆栈跟踪不包含 B.myMethod()
,因为 B
未实现 myMethod()
。
我怎样才能以某种方式在日志中打印调用超类?,即使它没有实现该方法。
用例是,如果我有 1000 个扩展 A 的类,并且只有一个类在
myMethod()
中有例外,我看不到是哪一个。
顺便说一句,在
B
中的方法中实现,仅调用super.myMethod()
不是一个选择,因为这在现有代码库中会花费太多精力。但也许这是唯一的选择?
一种选择是在类 A 中包装并重新抛出异常,但打印一条消息,显示调用对象的类。 它可能看起来像这样。
public class A {
public void myMethod() throws Exception {
try {
// Do some stuff
} catch (Exception e) {
System.out.println("Exception thrown by " + getClass());
throw e;
}
}
}
这是有效的,因为
getClass()
返回调用对象的类,而不是具有实际调用它的代码的类。