Java 8 предоставила нам много интересных способов использования функциональных интерфейсов, а вместе с ними и новую аннотацию: @FunctionalInterface. Его задача - сказать компилятору кричать на нас, если мы не будем придерживаться правил функционального интерфейса (только один абстрактный метод, который нуждается в переопределении, пожалуйста).
В пакете java.util.function есть 43 интерфейса с этой аннотацией. Поиск jdk.1.8.0/src для @FunctionalInterface
только включает 57 ударов. Почему другие интерфейсы (такие как AutoCloseable), которые могли бы добавить @FunctionalInterface
, все еще отсутствовали?
В документации аннотаций есть немного неопределенный намек:
"Информативный тип аннотации, используемый для указания того, что объявление типа интерфейса предназначено как функциональный интерфейс
Есть ли веская причина НЕ для намереваться, что интерфейс, который я разработал (который может просто оказаться функциональным интерфейсом), не может использоваться как один? Оставляет ли это указание на что-либо, кроме того, что он не понимает, что его можно было бы добавить?
Не добавляет ли абстрактные методы к любому опубликованному интерфейсу, который будет винить любого, кто его реализует, функциональный или нет? Я чувствую себя циничным, полагая, что они просто не потрудились охотиться на всех, но какое еще объяснение есть?
Обновить: после просмотра "Должен ли" Comparable "быть" функциональным интерфейсом "?" Я считаю, что у меня все еще есть проблемы с ворчанием. Когда интерфейс с одним интерфейсом и функциональный интерфейс структурно идентичны, что осталось быть другим? Является ли разница просто именами? Сопоставимые и компараторы достаточно близки к тому же семантически. Оказывается, они разные структурно, хотя так еще не лучший пример...
Есть ли случай, когда SMI структурно хорош для использования в качестве функционального интерфейса, но все же не рекомендуется использовать семантический смысл имени интерфейса и метода? Или, возможно, контракт, подразумеваемый Javadocs?