我有兴趣在我的应用程序中使用Guava库。 特别适用于前置条件和参数检查。
但是,虽然Preconditions检查它会抛出控制台上显示的运行时异常。 我想记录这个例外。 任何人都可以告诉我该怎么做。
提前感谢。
答案 0 :(得分:1)
以下是伪代码
try
{
Precondition.(...);
}
catch(RuntimeException re)
{
//log the exception here
//rethrow re
}
答案 1 :(得分:1)
我真的看不到,让RuntimeException的源执行日志记录会有什么好处......当你使用Preconditions时,你可以通过说“如果你的值为null则不能通过”来保护你的内部实现(或者如果你的长度大于x,或者......)。你这样做,因为你不想在代码中稍后处理这些约束。
每当使用非法值调用方法时,调用者立即获得RuntimeException,希望包含有用的消息(“setName():name不能为null!”)。 现在由调用者来决定如何处理这些信息。有时,您希望将消息委派给用户(“请输入正确的名称”),有时您必须记录错误,因为您有配置问题(名称应该由系统属性设置)。
我的结论:只需使用checkArgument(),并让调用者(客户端)处理处理,记录等。请记住,在实现中不需要任何进一步的代码。
答案 2 :(得分:0)
如果你使用前置条件作为断言(而不是输入验证),我认为在源代码中记录违反前提条件是有意义的(假设你的代码中有编程错误,并且你不能总是相信你的中间代码表现良好...: - )
如果是这样,你可能有兴趣看一下使用hamcrest-matchers的valid4j(在Maven Central上找到org.valid4j:valid4j)
对于前置条件和后置条件(即断言抛出AssertionError()):
import static org.valid4j.Assertive.*;
require(argument, notNullValue());
require(x, greaterThan(0));
...
ensure(result, isValid());
不幸的是,默认实现不会记录错误,但您可以覆盖AssertiveProvider来记录合同违规并将其注册为ServiceLoader,即在META-INF / services中。
详见: