我想将此异常添加到记录器:
throw new IllegalArgumentException("ex msg");
但是当我这样尝试的时候,我得到错误"抛出ex;"
Exception ex= new IllegalArgumentException("ex msg");
log.error("msg",ex);
throw ex;
知道如何解决这个问题吗? 感谢
答案 0 :(得分:3)
尝试使用ex
的特定类型,即IllegalArgumentException ex
或至少RuntimeException ex
,因为Exception
是已检查的例外,并且如果没有throws Exception
编译器会抱怨的方法签名。
为:
public void myMethod() {
throw new Exception(); //this needs to be declared
}
好:
public void myMethod() throws Exception {
throw new Exception();
}
public void myMethod() {
throw new RuntimeException(); //those don't have to be declared
}
你的代码与坏的例子类似,因为编译器thow ex
看起来像throw new Exception()
(不完全是你应该得到的)。
答案 1 :(得分:1)
Exception ex= new IllegalArgumentException("ex msg");
这个makex ex
和Exception
并且您无法throw Exception
而无需在方法签名中声明它,因此请在下面更改句子:
IllegalArgumentException ex= new IllegalArgumentException("ex msg");
或者在方法签名中添加throw Exception
。
答案 2 :(得分:0)
您的抽象方法签名不正确。
Exception ex = ... // The left side is a checked exception
...
throw ex; // Mr. Compiler, I want to throw a checked exception!
您告诉编译器您要抛出一个已检查的Exception
,但该方法并未声明它。最好在作业的左侧使用尽可能少的抽象,但在这种情况下,你走得太远了:)你需要RuntimeException
而不是Exception
。
// RuntimeException is unchecked. No need to declare it.
RuntimeException ex = new IllegalArgumentException(msg);
而不是
// Exception is checked and needs to be declared
Exception ex = new IllegalArgumentException(msg);