В java 8 абстрактный класс с одним абстрактным методом не является функциональным интерфейсом (JSR 335).
Этот interface
является функциональным интерфейсом:
public interface MyFunctionalInterface {
public abstract void myAbstractMethod();
public default void method() {
myAbstractMethod();
}
}
но это abstract class
не является:
public abstract class MyFunctionalAbstractClass {
public abstract void myAbstractMethod();
public void method() {
myAbstractMethod();
}
}
Поэтому я не могу использовать абстрактный класс в качестве цели для лямбда-выражений и ссылок на методы.
public class Lambdas {
public static void main(String[] args) {
MyFunctionalAbstractClass functionalAbstractClass = () -> {};
}
}
Ошибка компиляции: The target type of this expression must be a functional interface
.
Почему разработчики языка наложили это ограничение?