Вопросы для собеседования по Java (серия) — функциональный интерфейс
Дьявол всегда кроется в деталях! 😈
Краткий
Если вы хотите присоединиться к новому проекту, в котором используется как минимум Java 1.8 (если нет, вам следует подумать о поиске другого проекта), вы должны быть в состоянии объяснить, что такое FunctionalInterface
и из чего он сделан.
Реализация
Давайте погрузимся в это! 🚀
А FunctionalInterface
в Java — это интерфейс, имеющий только один абстрактный метод.
Вот и все!
@FunctionalInterface
public interface Flyable {
void fly();
}
Flyable.java
❗️ Помните, что @FunctionalInterface
аннотация не является обязательной, но рекомендуется добавлять ее для целей проверки.
Если у вас есть интерфейс с аннотацией @FunctionalInterface
и вы попытаетесь добавить второй абстрактный метод, вы получите приятную ошибку времени компиляции, сообщающую вам, что:
Multiple non-overriding abstract methods found in: YourFunctionalInterface.java
.
🤨 Подождите, компилятор жалуется не на то, что в вашем интерфейсе есть несколько абстрактных методов, а на то, что они non-overriding
.
❓ Хм, значит, мы Можно иметь несколько абстрактных, но подавляющий методы в нашем функциональном интерфейсе?
Ответ — да! ✅
Посмотрите больше подобных сообщений на new-spike.net! 🚀
Короче говоря
Каждый интерфейс Java содержит абстрактные методы с той же сигнатурой из класса Object для equals
, toString
а также hashCode
методы.
public interface YourInterface {
String toString(); // this method is already there but you can still explicitly declare it
}
По этой причине они не учитываются при валидации FunctionalInterface
.
🧩 Если эта часть была немного запутанной, ничего страшного, давайте резюмируем:
А FunctionalInterface
может содержать:
🔸 один абстрактный непереопределяющий метод
🔸 любое количество абстрактных переопределяющих методов // те, что из Object
🔸 любое количество методов по умолчанию
🔸 любое количество статических методов.
Полный пример
@FunctionalInterface
public interface Flyable {
void fly();
String toString(); // overriding method from Object class
default void defaultMethod() {
System.out.print("Log from default method!");
}
static void staticMethod() {
System.out.print("Log from static method!");
}
}
Flyable.java
Бонус
Если вы не знакомы с default
а также static
методы в интерфейсе Java и для чего они используются, внимательно следите за своей электронной почтой.
я работаю над Java Updates Series
где я описываю новые функции, которые появляются в каждой версии Java, начиная с 1.8.
Они будут присутствовать в самом первом посте!
Не пропустите больше таких сообщений! Подпишитесь на нашу бесплатную рассылку!
Посмотрите больше подобных сообщений на new-spike.net! 🚀