【问题标题】:Catch exception in Java parameters在 Java 参数中捕获异常
【发布时间】:2017-12-27 21:15:54
【问题描述】:

如何在 Java 中捕获异常参数

只是一个例子,在这样的代码中

MyClass obj = null;
logger.info("the field is " + obj.field);

抛出空指针异常。有没有办法自动做到这一点:

MyClass obj = null;
try {
  logger.info("the field is " + obj.field);
} catch(Exception e) {}

也许使用 Spring AOP、注解等?

编辑:我想要一些能够捕获任何异常的东西,这样我就不会从尝试记录的代码行中抛出异常。

【问题讨论】:

  • 静默消耗异常是你真正想要的吗?为什么不使用 logger.info("the field is " + obj == null ? "null" : obj.field); 之类的东西?
  • 你不能,而且 aop 在这里不会有任何帮助。如何使用所需的所有信息在您的类上创建一个 toString 实现并将您的引用附加到字符串?这样你就不用担心 nullity(如果 null 字符串“null”将被显示)
  • 我想让代码不受参数中任何异常的影响(因此日志记录无法让我们失望)。这只是一个例子
  • 我从未听说过任何日志框架从日志方法中抛出异常。您有理由相信这会发生吗?
  • 见q中的例子

标签: java exception-handling nullpointerexception annotations spring-aop


【解决方案1】:

不,没有。而且您不应该将代码包装在 try catch 中。这可以避免一些运行时异常,但也可以隐藏真正的代码问题。您可以使用Null Object pattern。您创建一个带有空字段的标记类,如果代码中的值应该为 null,则将其分配给该标记类的一个实例。这应该适用于您控制的代码,但它不能保证第三方库不会抛出 NPE。

编辑:我想要一些能够捕获任何异常的东西,这样我就不会从尝试记录的代码行中抛出异常。

这是永远无法实现的。您所要求的本质上是在 main 方法的开始到结束处的 try catch 块。即使您仍然可以从其他线程获取异常,例如

【讨论】:

  • 谢谢,我们想要捕获所有异常,而不仅仅是 NPE。
  • 我们最终使用了预处理器
猜你喜欢
  • 1970-01-01
  • 2014-11-02
  • 2018-11-05
  • 1970-01-01
  • 2021-10-14
  • 2013-12-01
  • 1970-01-01
  • 2016-03-10
  • 2010-11-25
相关资源
最近更新 更多