メソッドを入れておく変数
関数型言語をやっている人にとっては同じみの関数オブジェクト的なものが取り入れられました。Cな人は関数ポインタ、C#な人はデリゲートをイメージしましょう。
以下はprintlnを持ち運ぶ例です。
methodRef.java
Consumer<String> s = System.out::println;
関数はConsumer型に入れて持ち運ぶ事ができます。取得する方法はオブジェクト::取得したいメソッド
です。
今まで関数を持ち運ぼうと思えば無名クラスを定義するのが一般的でした。しかし既存のメソッドを(Methodクラス以外の方法で)何らかの変数に入れて持ち運ぼうと思うと、なんらかの無名クラスでくるんでやる必要があります。
printlnBringer.java
interface Println {
void print(String s);
}
Println p = new Println () {
@override
public void print(String s) {
System.out.println(s);
}
}
しかし、関数型が取り入れられたことにより簡潔に持ち運ぶことができるようになりました。持ち運んだメソッドはもちろん直接使うことも関数を引数に取るメソッドへの引数として使用できます。
使う.java
s.accept("pepepe");