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 새 기능

메서드 참조는 메서드 이름을 통해 메서드를 지정합니다.

메서드 참조는 언어 구조를 더 촉진적으로 간결하게 만들어 코드의 부가적인 부분을 줄입니다.

메서드 참조는 두 개의 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

Java 8 새 기능