Я хотел бы добавить информацию в трассировку / исключение стека.
По сути, сейчас у меня есть что-то подобное, что мне действительно нравится:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.so.main(SO.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
Однако я бы хотел перехватить это исключение и добавить к нему дополнительную информацию, сохранив при этом исходную трассировку стека.
Например, я бы хотел, чтобы это было:
Exception in thread "main" CustomException: / by zero (you tried to divide 42 by 0)
at com.so.main(SO.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
Таким образом, в основном я хочу перехватить ArithmeticException и перебросить, скажем, CustomException (добавив "вы пытались разделить 42 на 0" в этом примере), сохраняя при этом трассировку стека из исходного ArithmeticException.
Как правильно сделать это в Java?
Правильно ли следующее:
try {
....
} catch (ArithmeticException e) {
throw new CustomException( "You tried to divide " + x + " by " + y, e );
}