Должен ли Comparable <T> быть «Функциональным интерфейсом»?

Определение функционального интерфейса: «Функциональный интерфейс - это интерфейс, который имеет только один абстрактный метод (помимо методов Object) и, таким образом, представляет собой контракт с одной функцией».

Согласно этому определению,Comparable<T> это определенно функциональный интерфейс.

Определение лямбда-выражения: «Лямбда-выражение похоже на метод: оно предоставляет список формальных параметров, а тело - выражение или блок - выражается в терминах этих параметров».

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

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

Давайте посмотрим наComparable<T>этот интерфейс предназначен для использования в качестве одной функции? то есть. Был ли он предназначен для создания экземпляров только с этой единственной функцией?

ДокументацияComparable<T> начинается с «Этот интерфейс налагает полное упорядочение на объекты каждого класса, который его реализует. Это упорядочение называется естественным упорядочением класса, а метод compareTo класса называется его естественным методом сравнения».

Приведенное выше предложение ясно дает понять, чтоComparable<T> не предназначен для использования в качестве отдельной функции, но всегда предназначен для реализации классом, который имеет естественное упорядочение для своих экземпляров путем добавления этой единственной функции.

Что означало бы, что оно не предназначено для создания с помощью лямбда-выражения?

Дело в том, что у нас не было бы какого-либо объекта, который был бы только Comparable, он должен быть реализован и, таким образом, использован как дополнительная функция для класса.

Итак, есть ли способ в языке Java, с помощью которого создание лямбда-выражения дляComparable<T> предотвращается? Может ли разработчик интерфейса решить, что этот интерфейс предназначен для реализации классом, а не для создания в качестве экземпляра с помощью этого единственного метода с использованием лямбда-выражения?

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

Возможно, если Java предоставляет аннотацию типа NotFunctional, компилятор может проверить, что этот интерфейс не используется для создания лямбда-выражения, например.

@NotFunctional
public interface Comparable<T> { public int compareTo(T t); }

Ответы на вопрос(4)

Ваш ответ на вопрос