Я играю с Java 8 и нахожу базовый сценарий, который иллюстрирует catch 22, где исправление одной ошибки компиляции вызывает другую ошибку компиляции. Сценарий (это просто пример, упрощенный от чего-то более сложного):
public static List<String> catch22(List<String> input) {
List<String> result = null;
if (input != null) {
result = new ArrayList<>(input.size());
input.forEach(e -> result.add(e)); // compile error here
}
return result;
}
Я получаю ошибку компиляции:
Локальная переменная, определенная в охватывающей области, должна быть окончательной или окончательной окончательной
Если я изменил первую строку на:
List<String> result;
Я получаю ошибку компиляции в последней строке:
Результат локальной переменной не может быть инициализирован
Кажется, что единственный подход здесь - предварительно инициализировать мой результат в ArrayList, который я не хочу делать, или не использовать лямбда-выражения. Не хватает ли другого решения?