Можем ли мы применить аннотацию @FunctionalInterface к абстрактным классам в Java? - PullRequest
0 голосов
/ 10 марта 2019

Я знаю, что это может быть применено к интерфейсу , но поскольку интерфейсы с методами по умолчанию (интерфейсы Java 8+) очень близки к абстрактным классам, просто интересно, теперь мы можем использовать @ FunctionalInterface с Abstractклассы ?

Если нет, то почему мы не можем?

Ответы [ 3 ]

4 голосов
/ 10 марта 2019

Вы не можете применить @FunctionalInterface к абстрактному классу, перечислению или другой аннотации.From java doc :

Если тип аннотирован этим типом аннотации, компиляторы должны генерировать сообщение об ошибке, если:

  • Типявляется типом интерфейса, а не типом аннотации, перечислением или классом.
  • Аннотированный тип удовлетворяет требованиям функционального интерфейса.

Подробнее Аннотациякласс как функциональный интерфейс

1 голос
/ 10 марта 2019

Как видно из названия, его следует использовать для интерфейсов.Применение его к классу приводит к следующему:

Ошибка: (10, 1) java: непредвиденная аннотация @FunctionalInterface xxx не является функциональным интерфейсом

Но это не такбольшая проблема, так как это просто интерфейс маркера для интерфейсов с одним методом.

0 голосов
/ 10 марта 2019

Функциональный интерфейс существует для конкретной цели - Он используется только с интерфейсами, которые имеют строго один и только один абстрактный метод. если нет, то компилятор жалуется -

Invalid '@FunctionalInterface' annotation; TestInterface is not a functional interface

Eclipse showing error

И нет смысла использовать это с любым другим классом, enum stuffs

...