【发布时间】:2015-02-28 10:39:05
【问题描述】:
我使用 java8 创建了一个简单的接口。因为它包含一种方法和一种默认方法。
interface Lambda{
default void dummy(){
System.out.println("Call this..");
}
void yummy();
}
我正在尝试使用类似的历史方式来使用这两种方法
public class DefaultCheck {
public static void main(String[] args) {
DefaultCheck check = new DefaultCheck();
check.activate(new Lambda() {
@Override
public void yummy() {
dummy();
}
});
}
void activate(Lambda lambda){
lambda.yummy();
}
}
现在我正在尝试使用 lambda 表达式来实现同样的事情,得到类似 `dummy is undefined` 的错误
check.activate(() -> {
dummy();
});
任何人都可以建议,如何使用 Lambda 表达式来实现这个场景?
【问题讨论】:
-
作为记录,IntelliJ 不建议用 lambda 替换匿名类的用法,尽管如果
yummy()不调用dummy()会这样做。也许这是不可能的。 -
请注意,这与默认方法没有太大关系;它更多的是关于名称“this”的含义,在这种情况下,它被隐式使用。