我想将转换anonymous class为lambda expression。但是这个匿名类我使用this关键字。
例如,我写了这个简单的Observer/Observable模式:
import java.util.ArrayList;
import java.util.Collection;
public static class Observable {
    private final Collection<Observer> notifiables = new ArrayList<>();
    public Observable() { }
    public void addObserver(Observer notifiable) { notifiables.add(notifiable); }
    public void removeObserver(Observer notifiable) { notifiables.add(notifiable); }
    public void change() {
        notifiables.forEach(notifiable -> notifiable.changed(this));
    }
}
public interface Observer {
    void changed(Observable notifier);
}
和带有匿名类的此示例代码(使用this关键字):
public class Main {
    public static void main(String[] args) {
        Observable observable = new Observable();
        observable.addObserver(new Observer() {
            @Override
            public void changed(Observable notifier) {
                notifier.removeObserver(this);
            }
        });
        observable.change();
    }
}
但是当我将其转换为lambda表达式时:
public class Main {
    public static void main(String[] args) {
        Observable observable = new Observable();
        observable.addObserver(notifier -> { notifier.removeObserver(this); });
        observable.change();
    }
}
我收到此编译错误:
Cannot use this in a static context and in a non `static` context
public class Main {
    public void main(String[] args) {
        method();
    }
    private void method() {
        Observable observable = new Observable();
        observable.addObserver(notifier -> {
                notifier.removeObserver(this);
        });
        observable.change();
    }
}
编译错误是:
The method removeObserver(Main.Observer) in the type Main.Observable is not applicable for the arguments (Main)
所以我的问题是:有没有办法引用“ lambda对象” this?
observablefinal传递吗?observablethis