目次とぶっつぶつテーマ
http://snoopopo.hatenablog.com/entry/2015/04/14/102732
今日のテーマ:メソッド参照
こちらもjava8から登場。
//メソッド参照 Consumer<String> s = System.out::println; s.accept("aa");
いつもの System.out.println("aa") をConsumerの関数型インタフェースに入れれる。
Consumerは関数型インタフェースなので、唯一のメソッドであるacceptメソッドで sysout が使えるようになったかんじ。
構文
関数型インタフェースクラス 変数名 = 代入したいメソッドのオブジェクト::代入したいメソッド
渡したいメソッドの直前に::をつける。
オーバーロードされたメソッドの場合は?
メソッド名のあとの引数の指定をしていないから、オーバーロードなメソッドがある場合どれなのかと思った結果
・適当に作ったTestクラス
public void run(String str) { System.out.println("test(Strign str)"); } public void run(String str, String str2) { System.out.println("test(Strign str,String str2)"); } public void run(Integer i) { System.out.println("Integer i"); }
・使う側
//ジェネリクスでString指定してるから、run(String)がよばれる Test test = new Test(); Consumer<String> poyo = test::run; poyo.accept(""); //run(String,String)メソッドは出来ない?? //ジェネリクスでInteger指定しているから、run(Integer)がよばれる Test test = new Test(); Consumer<String> poyo = test::run; poyo.accept("");
となった。