【发布时间】:2021-01-27 10:20:35
【问题描述】:
我不想让 toJson 抛出异常,但 finally 块可能会抛出它。
是否最好将bas.close() 包装在 try/catch 块中,或者是否应该使用 try-with-resources 重写它
public String toJson() {
String json = null;
ByteArrayOutputStream bas = null;
try {
bas = new ByteArrayOutputStream();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writeValue(bas, this);
json = new String(bas.toByteArray());
} catch (Exception e) {
log.trace("Unable to parse JSON", e);
} finally {
if (bas != null) {
bas.close();
}
}
return json;
}
【问题讨论】:
-
是的,它应该被重写为try-with-resources,这对于所有可自动关闭的资源都是首选。
-
简单,不要扔一个。但是,老实说,我看不到您当前的方法会抛出异常
-
@Stultuske
ByteArrayOutputStream.close()记录为“如果发生 I/O 错误”会引发异常。 -
您不必关闭
ByteArrayOutputStreamstackoverflow.com/questions/2330569/… -
@AndyTurner 但它也被记录为什么都不做:
ByteArrayOutputStream.close():“关闭 ByteArrayOutputStream 无效。可以在关闭流后调用此类中的方法而不会生成 IOException。 "