A menudo me pregunto por qué Java usa ::
para referencias de métodos en lugar de .
, por ejemplo, por qué escribir
System.out::println
en vez de
System.out.println
Por supuesto, uno podría simplemente responder: "porque los diseñadores así lo decidieron". Por otro lado, hubiera esperado la segunda sintaxis porque el punto es la sintaxis Java habitual para acceder a los miembros de la clase.
Entonces, ¿hay alguna razón especial conocida para introducir la nueva ::
sintaxis en lugar de usar la .
convención existente para referencias de métodos?
Introdujeron una nueva sintaxis porque el comportamiento no es el mismo.
Esto
.
significa que desea obtener una referencia sobre la función para invocarla inmediatamente después.Cuando utiliza la referencia de método (
::
), desea almacenar una referencia en la función pero no desea invocarla de inmediato.Un aspecto más práctico es cómo diferenciar entre un atributo público y un método que tiene el mismo nombre con el
.
? Simplemente no puedes. Con::
no hay más ambigüedad.fuente