Этот вопрос очень тесно связан с another one. Однако я чувствую, что принятый ответ на этот вопрос не совсем окончательный.Имеет ли ссылка на метод в Java 8 конкретный тип, и если да, то что это такое?
Итак, что является Тип ссылки метода в Java 8? Вот небольшая демонстрация того, как эталонный метод может быть «слепок» в java.util.function.Function
(поднял):
package java8.lambda;
import java.util.function.Function;
public class Question {
public static final class Greeter {
private final String salutation;
public Greeter(final String salutation) {
this.salutation = salutation;
}
public String makeGreetingFor(final String name) {
return String.format("%s, %s!", salutation, name);
}
}
public static void main(String[] args) {
final Greeter helloGreeter = new Greeter("Hello");
identity(helloGreeter::makeGreetingFor)
.andThen(g -> "<<<" + g + ">>>")
.apply("Joe");
//Compilation error: Object is not a function interface
// Function
// .identity()
// .apply(helloGreeter::makeGreetingFor)
// .andThen(g -> "<<<" + g + ">>>")
// .apply("Joe");
Function
.<Function<String,String>>identity()
.apply(helloGreeter::makeGreetingFor)
.andThen(g -> "<<<" + g + ">>>")
.apply("Joe");
//Compilation error: Cannot resolve method 'andThen(<lambda expression>)'
// (helloGreeter::makeGreetingFor)
// .andThen(g -> "<<<" + g + ">>>")
// .apply("Joe");
// java.lang.invoke.LambdaMetafactory ???
}
private static <I,O> Function<I,O> identity(final Function<I,O> fun1) {
return fun1;
}
}
Итак, есть менее болезненный (более прямолинейный) способ литья ссылки на метод в скомпилированный/бетонный тип, который можно передавать?
'Функция f = helloGreeter :: makeGreetingFor; '? Вывод типа ссылки метода. Эта же ссылка на метод может использоваться как пользователь, функция или другие функциональные интерфейсы в зависимости от контекста. –
Если вы чувствуете, что на вопрос не ответил достаточно хорошо, вы должны предложить щедрость по оригинальному вопросу, а не спрашивать его во второй раз. Есть ли способ, которым ваш вопрос отличается от предыдущего, или я могу закрыть его как дубликат? –
Я полагаю, в сущности, они одинаковы. хотя ответы здесь кажутся более конкретными. Я закрою его сам. – Andrey