¿Por qué funciona un método de referencia de instancia de una mala adaptación firmas?

gar.stauffer:

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?

Shum Adrian:

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 produceStringes un método de instancia, la expresión anterior es equivalente a

String output = test( (Foo foo) -> foo.produceString() );

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=333611&siteId=1
Recomendado
Clasificación