Java 8 Referencias de métodos

Java 8 新特性Nuevas características de Java 8


La referencia a métodos apunta a un método mediante el nombre del método.

Las referencias a métodos pueden hacer que la construcción del lenguaje sea más compacta y concisa, reduciendo el código redundante.

La referencia a métodos utiliza un par de dos puntos (::).:: 。

A continuación, definimos 4 métodos en la clase Car como ejemplo para distinguir las referencias a los 4 tipos diferentes de métodos en Java.

package com.ejemplo.main; @FunctionalInterface public interface Supplier<T> { T get(); } class Car { //Supplier es una interfaz de JDK 1.8, aquí se usa junto con lambda. public static Car create(final Supplier<Car> supplier) { return supplier.get(); } public static void collide(final Car car) { System.out.println("Collided " + car.toString()); } public void follow(final Car another) { System.out.println("Following the " + another.toString()); } public void repair() { System.out.println("Repaired " + this.toString()); } }
  • Referencia al constructor:Su sintaxis es Class::new, o más generalmente Class< T >::new, como en el siguiente ejemplo:

    final Car car = Car.create( Car::new ); final List< Car > cars = Arrays.asList( car );
  • Referencia a método estático:Su sintaxis es Class::static_method, como en el siguiente ejemplo:

    cars.forEach( Car::collide );
  • Referencia a un método de un objeto arbitrario de una clase particular:Su sintaxis es Class::method, como en el siguiente ejemplo:

    cars.forEach( Car::repair );
  • Referencia a un método de un objeto específico:Su sintaxis es instance::method, como en el siguiente ejemplo:

    final Car police = Car.create( Car::new ); cars.forEach( police::follow );

Ejemplo de referencia a método

Ingrese el siguiente código en el archivo Java8Tester.java:

Archivo Java8Tester.java

import java.util.List; import java.util.ArrayList; public class Java8Tester { public static void main(String args[]){ List<String> names = new ArrayList(); names.add("Google"); names.add("Ejemplo"); names.add("Taobao"); names.add("Baidu"); names.add("Sina"); names.forEach(System.out::println); } }

En el ejemplo, referenciamos el método System.out::println como un método estático.

Ejecute el script anterior, el resultado de salida es:

$ javac Java8Tester.java 
$ java Java8Tester
Google
Ejemplo
Taobao
Baidu
Sina

Java 8 新特性Nuevas características de Java 8

Otras extensiones