Я изучаю 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);
}
};
}
}
Не могли бы вы объяснить, почему он дает мне исключение stackoverflow в стиле Java 7, тогда как не давайте никаких исключений, если я определяю его с помощью лямбды.