Недавно я начал изучать Java 8, и я не могу полностью понять концепцию "функционального интерфейса", которая необходима для реализации лямбда-выражений Java. В Java есть довольно подробное руководство по лямбда-функциям, но я застрял в главе, которая дает определение концепции функциональных интерфейсов. Определение гласит:
Точнее, функциональный интерфейс определяется как любой интерфейс, который имеет ровно один абстрактный метод.
Затем он переходит к примерам, одним из которых является интерфейс Comparator
:
public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); }
Я смог проверить, что вместо аргумента Comparator я могу использовать функцию лямбда, и она работает (например, Collections.sort(list, (a, b) → ab)
).
Но в интерфейсе Comparator методы compare
и equals
являются абстрактными, что означает, что он имеет два абстрактных метода. Итак, как это может работать, если для определения требуется, чтобы интерфейс имел ровно один абстрактный метод? Что мне здесь не хватает?