最近,我在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
呢?您认为这有意义吗?
几乎从来没有一个很好的理由这样做。toString()的约定没有说允许从该方法引发异常。引发异常的任何代码都是损坏的代码,并且这种异常需要公开和修复,而不是抑制。
如果您要将某些“不良”对象从您无法控制的库中转换为String,则可能需要编写catch (RuntimeExcepton e)
,但是这种捕获应附有详细描述为什么必要的注释,因为在正常情况下是不需要的。
除了Rogue引发异常的toString方法外,请注意Java已经至少有两种“安全”方式将可能为null的值转换为String:
Objects.toString(obj, null)
String.valueOf(obj)
…所以我会质疑safeToString方法是否应该存在。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句