ski*_*ppy 5 java exception stack-trace
我想创建一个例程来执行一些日志记录,执行一些其他操作,然后抛出异常.我希望从许多不同的地方调用这个例程.但是,在此例程中创建异常意味着它们将在其堆栈跟踪中具有此例程.我宁愿堆栈跟踪不报告此实用程序例程.有没有办法在调用者中创建Exception并将其传递给实用程序例程?
public static void die(String message) throws MyException {
log(message);
...
throw new MyException();
}
Run Code Online (Sandbox Code Playgroud)
对于Perl/Java双语的程序员:我如何使用Java进行carp?
ord*_*rig 12
您可以设置要抛出的任何异常的堆栈跟踪:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CarpTest {
public static void main(String[] args) {
new CarpTest().run();
}
public void run() {
methodThatCarps();
}
private void methodThatCarps() {
carp("Message");
}
private void carp(String message) {
RuntimeException e = new RuntimeException(message);
e.fillInStackTrace();
List<StackTraceElement> stack = new ArrayList<StackTraceElement>(Arrays.asList(e.getStackTrace()));
stack.remove(0);
e.setStackTrace(stack.toArray(new StackTraceElement[stack.size()]));
throw e;
}
}
Run Code Online (Sandbox Code Playgroud)
这将在运行时打印以下堆栈跟踪:
Exception in thread "main" java.lang.RuntimeException: Message
at CarpTest.methodThatCarps(CarpTest.java:18)
at CarpTest.run(CarpTest.java:14)
at CarpTest.main(CarpTest.java:10)
Run Code Online (Sandbox Code Playgroud)
请注意,如您所愿,方法"carp"不会出现在堆栈跟踪中.然而,堆栈跟踪的操作只能通过greates care来完成.
| 归档时间: |
|
| 查看次数: |
2252 次 |
| 最近记录: |