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