Operador "::"

Operador “::” también llamado “referencia del método” surgió a partir de Java 8, nos sirve para abreviar expresiones lambda entre otras funcionalidades. Por ejemplo:

Comparator x = (c1, c2) -> ((Computer) c1).getAge().compareTo(((Computer) c2).getAge());
		
Comparator c = Comparator.comparing(Computer::getAge);

//Expresiones identicas
a -> System.out.println(a)
System.out::println

Sintaxis: “::

Como podéis obsevar con este operador accedemos a un método de la clase ya implementado. Este operador ya lo hemos utilizado con ficheros con lambda por ejemplo accediendo a println.

Posibilidades de uso

Acceso a métodos estáticos de una clase

Clases de ejemplo para probar lo siguiente: Computer.java, ComputerUtils.java y OrdenadorHijo.java

Ejemplo:

List <Computer> inventory = Arrays.asList(
  new Computer( 2015, "white", 35), new Computer(2009, "black", 65));
inventory.forEach(ComputerUtils::repair);

Acceso a método normales de un objeto

Computer c1 = new Computer(2015, "white");
Computer c2 = new Computer(2009, "black");
Computer c3 = new Computer(2014, "black");
Arrays.asList(c1, c2, c3).forEach(System.out::print);

Uso con herencia

Método de la superclase:

public Double calculateValue(Double initialValue) {
    return initialValue/1.50;
}

Método sobreescrito en clase hija:

@Override
public Double calculateValue(Double initialValue){
    Function<Double, Double> function = super::calculateValue;
    Double pcValue = function.apply(initialValue);
    return pcValue + (initialValue/10) ;
}

Llamar al constructor

Con la palabra new podemos ejecutar el constructor de una clase:

class GFG {
  
    // Class constructor
    public GFG(String s)
    {
        System.out.println("Hello " + s);
    }
  
    // Driver code
    public static void main(String[] args)
    {
  
        List<String> list = new ArrayList<String>();
        list.add("Geeks");
        list.add("For");
        list.add("GEEKS");
  
        // call the class constructor
        // using double colon operator
        list.forEach(GFG::new);
    }
}

Ejercicio 1

Crea una lista de nombres, ordénalos (por longuitud) y muéstralos por pantalla usándo lambda y el operador ::