#java #try-catch
#java #попробуйте-catch
Вопрос:
например, в настоящее время у меня есть эта реализация:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
//write to bos
}
catch (Exception exception)
{
throw new exception
}
somemethod(bos, foo1, foo2);
}
Является ли это хорошей / плохой практикой / недорогой / затратной или имеет какое-либо значение, если я изменю этот метод на следующий:
try(ByteArrayOutputStream bos = new ByteArrayOutputStream())
{
//write to bos
somemethod(bos, foo1, foo2);
}
catch (Exception exception)
{
throw new exception
}
}
Пришлось переместить некоторый метод внутри try, поскольку ему нужна переменная bos.
Ответ №1:
С точки зрения производительности? Не имеет ни малейшего значения.
С точки зрения стиля кода: это другая история. Вы не должны помещать методы в try
блок, если только связанный блок catch и / или finally не предназначен для обработки этого. Вместо этого сделайте это:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
// write to bos
} catch (Exception e) {
// handle things - you really want to catch ALL exceptions?
}
somemethod(bos, foo1, foo2);
т. е. переместить объявление наружу. Вы даже можете сделать что-то вроде:
String foo; // no value assigned yet
try (someResource) {
foo = readFromIt; // assigned here though.
} catch (IOException e) {
throw new ResourceRetrievalException(e);
}
System.out.println(foo); // hey I'm using foo, outside the try!
ПРИМЕЧАНИЕ: BAOS не нуждается в блоке try. Если ваш линтер жалуется на это, найдите линтер получше. BAOS на самом деле не является ресурсом, который нуждается в закрытии, сборщик мусора выполнит эту работу.