我想使用OtherException扩展Exception类,并在消息字段中写入throw类和方法的名称。除了使用父构造函数设置消息之外,我看不到任何其他方法,但是我不能在super的参数中使用像getStackTrace这样的方法。任何解决方法?或者有人知道为什么不能这样做吗?
这是我想要的功能:
public OtherException(final String message) {
super(message + getStackTrace()[0].getClassName()+" "+getStackTrace()[0].getMethodName());
}
但它在Java中不起作用。
这有效:
public OtherException(final String message) {
super(message + " class: " + Thread.currentThread().getStackTrace()[2].getClassName() + ", method: "
+ Thread.currentThread().getStackTrace()[2].getMethodName());
}
也许有人知道更优雅的东西?
答案 0 :(得分:0)
据我所知,您希望将异常抛出的方法名称作为异常消息,不是吗? 在这种情况下,您的实现是可以的,只是我将它放入您的异常的默认构造函数中:
public OtherException() {
super(getStackTrace()[0].getClassName()+" "+getStackTrace()[0].getMethodName());
}
实际上,你没有在构造函数中使用message
参数,所以它没用。如果覆盖默认构造函数,您仍然可以实现其他构造函数,这些构造函数将接受消息并将其传递给super
,通常人们在创建自定义异常时会这样做。
答案 1 :(得分:0)
通常,您将在堆栈跟踪的异常中使用堆栈跟踪。
public class OtherException extends Exception {
public OtherException(final String message) {
super(message);
}
}
OtherException oe = new OtherException("Hello");
StackTraceElement[] stes = oe.getStackTrace(); // get stack trace.
在创建Exception时记录堆栈信息。实际的StackTraceElement []是在第一次使用时创建的。