LoginSignup
9

More than 5 years have passed since last update.

メソッド参照

Last updated at Posted at 2014-09-09

メソッドを入れておく変数

関数型言語をやっている人にとっては同じみの関数オブジェクト的なものが取り入れられました。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");

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9