Ссылки на методы в Java 8

Java 8 新特性Новые возможности Java 8


Ссылка на метод указывает на метод по его имени.

Ссылки на методы позволяют сделать языковые конструкции более компактными и лаконичными, сокращая избыточный код.

Ссылки на методы используют пару двоеточий:: 。

Ниже мы определяем 4 метода в классе Car в качестве примеров, чтобы различать 4 различных типа ссылок на методы в Java.

package com.example.main; @FunctionalInterface public interface Supplier<T> { T get(); } class Car { //Supplier — это интерфейс в JDK 1.8, используется здесь вместе с lambda. public static Car create(final Supplier<Car> supplier) { return supplier.get(); } public static void collide(final Car car) { System.out.println("Столкнулся " + car.toString()); } public void follow(final Car another) { System.out.println("Следом за " + another.toString()); } public void repair() { System.out.println("Отремонтирован " + this.toString()); } }
  • Ссылка на конструктор:Её синтаксис — Class::new, или, в более общем случае, Class< T >::new. Пример:

    final Car car = Car.create( Car::new ); final List< Car > cars = Arrays.asList( car );
  • Ссылка на статический метод:Её синтаксис — Class::static_method. Пример:

    cars.forEach( Car::collide );
  • Ссылка на метод для произвольного объекта определённого класса:Её синтаксис — Class::method. Пример:

    cars.forEach( Car::repair );
  • Ссылка на метод для конкретного объекта:Её синтаксис — instance::method. Пример:

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

Примеры ссылок на методы

Введите следующий код в файл Java8Tester.java:

Файл 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("Example"); names.add("Taobao"); names.add("Baidu"); names.add("Sina"); names.forEach(System.out::println); } }

В примере мы ссылаемся на метод System.out::println как на статический метод.

Выполните приведенный выше скрипт, и вывод будет:

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

Java 8 新特性Новые возможности Java 8

Другие расширения