"Nueva" palabra clave en Java Lambda método de referencia

Clatty la torta:

He visto una gran cantidad de procedimientos en los que una nueva clase se instancia en un método de referencia lambda, pero parece que no puede entender por qué. ¿Cuándo es la newpalabra clave necesaria en una referencia método?

Por ejemplo, el siguiente pasa compilación:

UnaryOperator<String>stringToUpperCase = String::toUpperCase;

Pero esto no es así:

UnaryOperator<String>stringToUpperCase = new String()::toUpperCase; 
Eran :

String::toUpperCasees una referencia método que se puede aplicar a cualquier Stringinstancia.

new String()::toUpperCasees una referencia método que se puede aplicar a un específico Stringinstancia (la instancia creada por new String()).

Desde UnaryOperator<String>espera un método que toma una Stringy devuelve una String, String::toUpperCaseataques (ya que se puede aplicar en una Stringy obtener la versión mayúscula de ese String).

Por otra parte, new String()::toUpperCaseno se ajusta UnaryOperator<String>, ya que se ejecuta en un ya especificada String, por lo que no se puede pasar otra Stringinstancia a la misma.

Puede, sin embargo, por asignado a una Supplier<String>, ya que simplemente suministra un vacío Stringejemplo:

Supplier<String> emptyStringToUpperCase = new String()::toUpperCase; 

Esto es similar a:

Supplier<String> emptyStringToUpperCase = () -> new String().toUpperCase();

mientras esto:

UnaryOperator<String> stringToUpperCase = String::toUpperCase;

es parecido a:

UnaryOperator<String> stringToUpperCase = s -> s.toUpperCase();

Supongo que te gusta

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