Почему происходит ошибка "missing return statement" в конструкции try-catch?
У меня есть метод:
public static String readString(){
try(BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))){
return bufferedReader.readLine();
} catch (IOException e){
}
}
Выдает ошибку:
Missing return statement
Ответы (1 шт):
Ошибка missing return statement возникает, когда метод, который имеет тип возвращаемого значения (является не void), ничего не возвращает оператором return.
Давайте посмотрим на ваш метод с точки зрения jdk.
Так, нужно постараться выполнить код в блоке try. Есть два варианта: код в блоке try выполнится или не выполнится (произойдёт исключение).
Если код в блоке try выполнится (исключения не произойдёт):
из метода будет возвращена строка, считанная BufferedReader'ом. Всё ок.
Если код в блоке try не выполнится (произойдёт исклоючение): программа "перепрыгивает" в блок catch. В блоке catch ничего не возвращается. Программа будет выполнять метод дальше, но в методе больше ничего нет. И оператора return, который должен вернуть значение, тоже нет. А метод должен возвращать строку. Всё плохо, так быть не должно. Вот и причина ошибки.
Решение проблемы:
Нужно добавить оператор return в блок catch. Можно вернуть сообщение об ошибке, например:
} catch (IOException e){
return "Ошибка! Не удалось считать данные!";
}
Но можно сделать даже так:
} catch (IOException e){
return e.getMessage();
}
P.S:
В данном случае не нужно использовать try-with-resources, про это уже говорил @NowhereMan. Просто используйте обычный try-catch. И закрывать поток System.in не надо:
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
return bufferedReader.readLine();
} catch (IOException e){
return "Ошибка! Проблема при чтении данных!";
}