【发布时间】:2018-09-29 04:15:47
【问题描述】:
我正在学习 Java 8。我正在尝试创建自定义谓词链接方法,如下所示
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
default Predicate<T> and(Predicate<T> other){
return t -> this.test(t) && other.test(t);
}
}
当我像上面那样定义我的谓词时,它可以工作,但是如果我尝试实现与下面相同的,它会给我 StackOverflow 异常
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
default Predicate<T> and(Predicate<T> other){
//return t -> this.test(t) && other.test(t);
return new Predicate<T>() {
@Override
public boolean test(T t) {
return test(t) && other.test(t);
}
};
}
}
您能否解释一下为什么它给了我 Java 7 风格的 stackoverflow 异常,而如果我使用 lambda 定义它则不给出任何异常。
【问题讨论】:
-
lambda 中的
this不指代 lambda。在匿名内部类中,this指的是内部类的实例。