Имеет ли ссылка на метод в Java 8 конкретный тип, и если да, то что это? [Дубликат]

На этот вопрос уже есть ответ здесь:

Как косвенно запустить ссылку на метод в Java 8? 2 ответа

Этот вопрос довольно тесно связан сдругой, Тем не менее, я чувствую, что принятый ответ на этот вопрос не совсем окончательный.

И чтоявляется тип ссылки на метод в 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;
  }
}

Итак, есть ли менее болезненный (более простой) способ преобразования ссылки на метод в скомпилированный / конкретный тип, который можно обойти?

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

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