【Java】 メソッド参照

■ メソッド参照 (method reference)

 * Java 1.8 から追加された機能

構文

コロン2つ「::」
【クラス名】::【メソッド名】

【インスタンス名】::【メソッド名】

■ サンプル

IHelloWorld.java

@FunctionalInterface
public interface IHelloWorld {
  String sayHello(String name);
}
@FunctionalInterface については、以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/37206013.html

HelloWorld.java

public class HelloWorld implements IHelloWorld {
  @Override
  public String sayHello(String name) {
    return "Hello, " + name + "!!!";
  }
}

Main.java

public class Main {

  public static void main(String[] args) {
    // 【参考】 匿名内部クラス / 無名内部クラス
    //   => https://blogs.yahoo.co.jp/dk521123/37174760.html
    print(new IHelloWorld() {
      @Override
      public String sayHello(String name) {
        return "Hello World, " + name + "!";
      }
    }, "Tom");

    // 【参考】ラムダ式
    print((name) -> "Hi, " + name + "!!", "Sam");

    // ★注目★ 参照メソッド
    HelloWorld hello = new HelloWorld();
    print(hello::sayHello, "Mike");
  }

  private static void print(IHelloWorld hello, String name) {
    System.out.println("Result : " + hello.sayHello(name));
  }
}

出力結果

Result : Hello World, Tom!
Result : Hi, Sam!!
Result : Hello, Mike!!!