как читать
Лямбда-выражение устраняет необходимость в анонимном классе и предоставляет Java очень простые, но мощные возможности функционального программирования.
что я понимаю, что лямбда - это замена внутренних классов одним методом для устранения громоздкости кода
public class Main {
interface Foo {
int x = 20;
void bar();
}
public static void main(String[] args) {
Main app = new Main();
app.start();
}
int x = 10;
public void start()
{
Main test = new Main();
test.test(new Foo()
{
@Override
public void bar() {
System.out.println("Inner Class X= " + this.x);
}
});
test.test(() -> System.out.println("Lambda X= " + this.x));
}
public void test(Foo foo) {
foo.bar();
}
}
вывод, который я получаю,
Inner Class X = 20
Lambda X = 10
чего я ожидаю
Inner Class X = 20
Lambda X = 20
this
относится к разным вещам в лямбде и анонимном классе. Почему? Потому что именно так они определены в спецификации языка. - person Andy Turner   schedule 24.01.2018x
является статическим дляFoo
, поэтому не пытайтесь ссылаться на него через экземпляр. - person Andy Turner   schedule 24.01.2018