English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Управление потоком

Java Массив

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Список (List)

Java Очередь (Queue)

Java Словарь (Map)

Java Множество (Set)

Java Ввод/вывод (I/O)

Java Reader/Writer

Другие темы Java

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

Java 8 новые возможности

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

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

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

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

package com.w3codebox.main;
 
@FunctionalInterface
public interface Supplier<T> {
    T get();
}
 
class Car {
    //Supplier является интерфейсом jdk1.8, здесь используется вместе с lamda
    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());
    }
}
  • Ссылка на конструктор:Грамматика 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 введите следующий код:

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

В примере мы используем метод System.out::println в качестве статического метода для обращения.

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

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

Java 8 новые возможности