Java 8 capture 22 avec des expressions lambda et effectivement finale

Je suis en train de jouer avec Java 8 et frappé d'un scénario de base qui illustre un catch 22 où corriger une erreur de compilation provoque une autre erreur de compilation. Le scénario (qui est juste un exemple simplifié de quelque chose de plus complexe):

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;
}

J'obtiens une erreur de compilation:

Variable locale suite définie dans un cadre englobant doit être définitive ou efficacement final

Si je change la première ligne:

List<String> result;

J'obtiens une erreur de compilation sur la dernière ligne:

La variable locale résultat peut ne pas avoir été initialisé

Il semble que la seule solution ici est de pré-initialiser mon résultat à une liste de tableaux, dont je ne veux pas faire, ou ne pas utiliser les expressions lambda. Ai-je raté une autre solution?

source d'informationauteur Josh Stone | 2014-04-01