Как использовать Try-with-resources с оператором if?

У меня есть простой код:

try (FileReader file = new FileReader(messageFilePath);
     BufferedReader reader = new BufferedReader(file)) {

    String line;

    while ((line = reader.readLine()) != null) {
        ////
    }
} 

Я хочу написать что-то вроде этого:

FileReader file = null;
///.....

try(file = (file == null ? new FileReader(messageFilePath) : file);
     BufferedReader reader = new BufferedReader(file)) {

    String line;

    while ((line = reader.readLine()) != null) {
        ////
    }
} 

Это позволяет мне использовать повторно FileReader, Является ли это возможным? Если нет, то как правильно использовать повторно FileReader? я использую java 8, если это важно.

1 ответ

Решение

Вы всегда должны определить новую переменную часть блока try-with-resources. Это текущее ограничение реализации в Java 7/8. В Java 9 они рассматривают поддержку того, что вы просили изначально.

Однако вы можете использовать следующий маленький трюк:

public static void main(String[] args) throws IOException {
    FileReader file = null;
    String messageFilePath = "";

    try (FileReader reader = file = (file == null ? new FileReader(messageFilePath) : file);
            BufferedReader bufReader = new BufferedReader(file)) {

        String line;

        while ((line = bufReader.readLine()) != null) {
            ////
        }
    }
}
Другие вопросы по тегам