Вопросы для собеседования по 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! 🚀

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *