Avec javac 1.8.0_77 cette classe ne compile pas:Pourquoi les lambas Java sont-ils traités différemment des classes imbriquées en ce qui concerne l'initialisation du champ d'instance?
import java.util.function.*;
public class xx {
final Object obj;
final Supplier<Object> supplier1 = new Supplier<Object>() {
@Override
public Object get() {
return xx.this.obj;
}
};
final Supplier<Object> supplier2 =() -> { return this.obj; };
xx(Object obj) {
this.obj = obj;
}
}
est ici l'erreur:
xx.java:12: error: variable obj might not have been initialized
final Supplier<Object> supplier2 =() -> { return this.obj; };
^
1 error
Questions:
- est la génération de cette erreur correcte selon le JLS ? Si oui, quel est le raisonnement derrière le JLS traitant une implémentation
@FunctionalInterface
lamba (supplier2
) différemment de son implémentation de classe interne équivalente (supplier1
) à cet égard?
Merci.
Merci pour la référence de bogue. – Archie
Le bug de spécification a été résolu, javac 9-ea + 142 rejette toujours le programme. –
Avez-vous répondu à votre question? _ (Indice: accepter la réponse serait bien :)) _. –