menu
書いてる野郎
orebike@gmail.com
ラムダで記述できるパラメータの場所に既存の実装をそのまま流用したい場合がある。
シグネチャが一致した場合は、そこにメソッドの参照を記述できる。 ラムダの関数型インターフェース(メソッド定義が1個しかなくインタフェース = メソッドを満たせるインタフェース)を満たすなら、現実のメソッド1個だけも使えていいだろ、という理屈。
このように記述できる。
Hoge hoge = new Hoge(); hoge.dododo(Piyo::toPiyo);
dododo の内部実装では toPiyo と同じシグネチャのメソッドを呼び出しているのでこのような記述が成立する。
インスタンスに対してもメソッド参照が記述できる。
クラスの記述の代わりにインスタンスが格納されている変数を使う。
クラスと違うのは、クラス指定で指定するメソッド参照が getter のような単純なモノや、パラメータのみで出力が決まるモノが多い。 ラムダを受ける側がもうすでに操作対象を保持している場合や、そもそもメソッド参照で渡すように設計されたクラスを使うからである。
操作対象を知らない場合、外部からの状態をあわせつつ、内部でその動きを記述したい場合は、インスタンスのメソッド参照が使える。
複数のインスタンス状態を同時に把握する必要が出てくるので、あまり積極的に用いないほうがよいように感じる。