С JAVAC 1.8.0_77 этот класс не компилируется:Почему Java lambas обрабатывается иначе, чем вложенные классы в отношении инициализации поля экземпляра?
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;
}
}
Вот ошибка:
xx.java:12: error: variable obj might not have been initialized
final Supplier<Object> supplier2 =() -> { return this.obj; };
^
1 error
Вопросы:
- является генерация этой ошибки исправить в соответствии с JLS ?
- Если да, то в чем причина JLS, рассматривающей реализацию lamba
@FunctionalInterface
(supplier2
) в отличие от ее эквивалентной внутренней реализации класса (supplier1
) в этом отношении?
Спасибо.
Спасибо за ссылку об ошибке. – Archie
Ошибка спецификации была решена, javac 9-ea + 142 все еще отклоняет программу. –
На ваш вопрос ответили? _ (Подсказка: прием ответа будет приятным :)) _. –