Por lo que estaba haciendo algo de código anterior y descubrió que una función que tiene una firma que sólo se necesita Function<FooClass, String>
, que puede pasar a un método para una función de FooClass que produce una cadena (ver ejemplo a continuación).
Así que he descubierto que esto es apoyado por java, quiero decir .. compila, y he encontrado un artículo que describe la característica aquí
public static class Foo {
public String produceString() {
return "Hello world!";
}
}
public static String test(Function<Foo, String> produceString) {
return produceString.apply(new Foo());
}
public static void main(String[] args) {
// WEIRD CODE BELOW!! Here's the method reference:
String output = test(Foo::produceString);
System.out.println(output);
// Outputs "Hello world!"
}
Mi pregunta es la siguiente: ¿cómo diablos hace java hacer esto !?
¿Alguien tiene una explicación para por qué esto funciona?
Es posible que el tratamiento Método de referencia como el azúcar sintáctica para crear correspondiente expresión lambda:
String output = test(Foo::produceString);
dado produceString
es un método de instancia, la expresión anterior es equivalente a
String output = test( (Foo foo) -> foo.produceString() );