¿Cómo referencias método de trabajo bajo el capó cuando hay varios argumentos

Tushar Baviskar:

¿Cómo se asegura que el compilador lambda equivalente para las siguientes afirmaciones

BinaryOperator<String> concatOperator = String::concat; 

es

BinaryOperator<String> concatOperator = (resultString, inputString) -> resultString.concat(inputString);

y no

BinaryOperator<String> concatOperator = (resultString, inputString) -> inputString.concat(resultString);
Andrew Tobilko:

Este comportamiento está bien documentado en el JLS

15.13.3. Evaluación de tiempo de ejecución del método de Referencias

Si la declaración de tiempo de compilación es un método de instancia, a continuación, la referencia de destino es el primer parámetro formal de la invocación del método . De lo contrario, no hay ninguna referencia de destino.

Si la declaración de tiempo de compilación es un método de instancia, a continuación, los argumentos de la expresión de invocación de método (si los hay) son la segunda y parámetros formales posteriores de la invocación del método . De lo contrario, los argumentos de la expresión de invocación de método son los parámetros formales de la invocación del método.

y parece razonable e intuitiva. Si se toma un método con aridad n( n > 2), se hace evidente que la referencia objetivo debe ser el primer parámetro, no el último, no el uno en el medio.

Supongo que te gusta

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