从Java中的toString方法捕获异常

Java Dude:

最近,我在GitHub上看到了以下代码:

private static String safeToString(Object obj) {
    if (obj == null) return null;
    try {
        return obj.toString();
    } catch (Throwable t) {
        return "Error occured";
    }
}

我从未toString()try-catch块中放置过方法调用但是现在,当我考虑它时,这可能是有道理的。例如,某人可能会覆盖toString()类中可能抛出运行时异常的方法,例如NullPointerException所以我们可以尝试赶上Exception但是为什么Throwable呢?您认为这有意义吗?

VGR:

几乎从来没有一个很好的理由这样做。toString()约定没有说允许从该方法引发异常。引发异常的任何代码都是损坏的代码,并且这种异常需要公开和修复,而不是抑制。

如果您要将某些“不良”对象从您无法控制的库中转换为String,则可能需要编写catch (RuntimeExcepton e),但是这种捕获应附有详细描述为什么必要的注释,因为在正常情况下是不需要的。

除了Rogue引发异常的toString方法外,请注意Java已经至少有两种“安全”方式将可能为null的值转换为String:

  • Objects.toString(obj, null)
  • String.valueOf(obj)

…所以我会质疑safeToString方法是否应该存在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章