English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
메서드 참조는 메서드 이름을 통해 메서드를 지정합니다.
메서드 참조는 언어 구조를 더 촉진적으로 간결하게 만들어 코드의 부가적인 부분을 줄입니다.
메서드 참조는 두 개의 colons ::를 사용합니다.
아래에서 Car 클래스에서 정의했습니다 4 이 메서드를 예로 들어 Java에서 구분하는 방법 4 여러 가지 다른 메서드 참조가 있습니다.
package com.w3codebox.main; @FunctionalInterface public interface Supplier<T> { T get(); } class Car { //Supplier는 jdk1.8의 인터페이스, 여기서 람다와 함께 사용되었습니다. 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);
Java에서8Tester.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