Можно ли использовать ссылки на методы Java 8 как Lambdas все время? - PullRequest
0 голосов
/ 31 октября 2018

Могу ли я использовать ссылки на методы Java 8, такие как myInstance::myMethod, взаимозаменяемо с лямбда-выражением, например () -> myInstance.myMethod(), или есть какие-либо предостережения относительно того, как они создаются / оцениваются / выполняются, и иногда это может уступить место различным средам выполнения поведение и особенности?

1 Ответ

0 голосов
/ 31 октября 2018

Я настоятельно рекомендую вам не путать ссылки на методы с лямбдами. Лямбды являются их собственной темой для обсуждения и не полностью зависят от ссылок на методы.

Так уж получилось, что с помощью ссылок на методы мы можем удалить множество шаблонов, потому что ссылки на методы предоставляют синтаксический сахар.

Например, предположим, что мне нужна функция, которая принимает два параметра разных типов (скажем, String и Integer), и я хочу, чтобы она выводила String.

BiFunction<String, Integer, String> func = (s, i) -> s.substring(i);

Вместо этого я мог бы переписать это со ссылками на метод, поскольку существует метод, который соответствует этой сигнатуре.

BiFunction<String, Integer, String> func = String::substring;

Если бы я хотел соответствовать другой подписи, я должен был бы создать свою собственную @FunctionalInterface, чтобы выполнить это.

@FunctionalInterface
interface TriFunction<T, U, V, R> {
    R apply(T t, U u, V v);
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...