Я думаю, что это тот случай, когда понимание концепции затруднено из-за использования неопределенной терминологии в документации.
Имейте в виду, что ссылка на метод, как тип лямбды, реализует функциональный интерфейс, и что ЛЮБОЙ метод, который соответствует сигнатуре интерфейса, может использоваться, если вы можете ссылаться на него в своей программе.
Из четырех видов ссылок на методы, которые представляют различные способы доступа (ссылки) к методу. Синтаксис трех довольно прост: если это статический метод, вы используете имя класса перед оператором ::, если это метод экземпляра в объекте, то вы обычно используете ссылочную переменную для объекта, или если это конструктор вы используете ClassName::new.
Четвертый тип — это когда вы хотите вызвать метод, который является методом экземпляра параметра, переданного в функцию. С лямбдой проблем нет, потому что вы можете ссылаться на переменную параметра, например:
(String someString) -> someString.toLowerCase();
Однако, поскольку в ссылке на метод нет явной переменной параметра, вместо этого используется следующий синтаксис:
String::toLowerCase;
Компилятор использует конкретный тип (String) для ссылки на функциональный метод (toLowerCase), содержащийся в произвольном объекте (объект, переданный в параметре). Термин «произвольный объект» используется потому, что фактический объект, передаваемый в параметре, может быть другим при каждом выполнении ссылки на метод.
person
Steve McCollom
schedule
11.01.2021