Java try конструкция в try

212
17 сентября 2018, 01:10
try {
    try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
            new FileOutputStream(FILENAME), "UTF8"))) {
        bw.write(UNICODE_STRING);
        bw.flush();
    }
} catch (UnsupportedEncodingException | FileNotFoundException ex) {
    Logger.getLogger(UnicodeWriteExample.class.getName())
            .log(Level.SEVERE, null, ex);
} catch (IOException ex) {
    Logger.getLogger(UnicodeWriteExample.class.getName())
            .log(Level.SEVERE, null, ex);
}

Имеется ли смысл вкладывать try{} в еще один try{} ? Ведь можно было обойтись одним

Answer 1

В вашем случае код можно переписать таким образом (убрав один try) :

try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream(FILENAME), "UTF8"))) {
    bw.write(UNICODE_STRING);
    bw.flush();
} catch (UnsupportedEncodingException | FileNotFoundException ex) {
    Logger.getLogger(UnicodeWriteExample.class.getName())
            .log(Level.SEVERE, null, ex);
} catch (IOException ex) {
    Logger.getLogger(UnicodeWriteExample.class.getName())
            .log(Level.SEVERE, null, ex);
}

Но т.к у вас выполняются абсолютно одинаковые действия, то не имеет смысла ловить исключения разных типов:

try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream(FILENAME), "UTF8"))) {
    bw.write(UNICODE_STRING);
    bw.flush();
} catch (Exception ex) {
    Logger.getLogger(UnicodeWriteExample.class.getName())
            .log(Level.SEVERE, null, ex);
}

В общем случае конструкций вида : try try catch catch желательно избегать, т.к такой код трудно читать.

READ ALSO
Как сохранить в Room список обьектов?

Как сохранить в Room список обьектов?

Для примера, есть у меня класс Human() который как один из параметров содержит список Car()

253
Java объявление классов

Java объявление классов

Можно ли в java объявить класс прямо в методе?

212
Java работа с массивом

Java работа с массивом

если массив {true, true, true} result = true; если массив {true, false, true} result = false;

213
Где найти примеры использования кодека H264 Cisco для андроид

Где найти примеры использования кодека H264 Cisco для андроид

Мне нужно декодировать видеопоток H264, но стандартный MediaCodec не справляетсяНужен пример использования H264 Cisco в андроиде

239