はじめに
皆さん。こんにちは!
DreamHanksの254cmです。
今回はメソッド参照について説明していきます。
Java記事のまとめはこちらです。
メソッド参照とは?
メソッド参照はラムダを使ってメソッドを一つ呼び出して処理する場合、
ラムダの代わりに、メソッド参照を利用してメソッドを引数に渡せます。
メソッド参照の書き方
1 2 |
クラス名::メソッド名 オブジェクト変数名::メソッド名 |
サンプル1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class MethodRefSample { public static void main(String[] args) { List<String> strList = new ArrayList<String>(); strList.add("a"); strList.add("b"); strList.add("c"); strList.add("d"); strList.stream().forEach(e -> System.out.println(e)); strList.stream().forEach(System.out::println); } } |
上記のサンプルのラムダで表現した処理は要素を「System.out.println()」メソッドで出力するだけです。
上記のような場合、ラムダの代わりに、ラムダで使われるメソッドの参照を渡して同じ効果を出すことができます。
サンプル2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public class MethodRefSample { public static void main(String[] args) { Calculator cal = new Calculator(); Lambda addOper = cal::add; Lambda subtractOper = cal::subtract; Lambda multiflyOper = cal::multifly; Lambda devideOper = cal::devide; System.out.println(addOper.operate(4, 3)); System.out.println(subtractOper.operate(4, 3)); System.out.println(multiflyOper.operate(4, 3)); System.out.println(devideOper.operate(4, 3)); } } @FunctionalInterface interface Lambda { public int operate(int a, int b); } class Calculator { public int add(int a, int b) { return a+b; } public int subtract(int a, int b) { return a-b; } public int multifly(int a, int b) { return a*b; } public int devide(int a, int b) { return a/b; } } |
上記のようにオブジェクト変数のメソッドを参照して渡すこともできます。
コンストラクタの参照
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class MethodRefSample { public static void main(String[] args) { Constructor conSample = Sample::new; Sample sam = conSample.sampleConst(); } } interface Constructor{ public Sample sampleConst(); } class Sample { int a; } |
上記のようにコンストラクタもメソッドの一種なので、メソッド参照ができます。
終わりに
今回の記事は以上になります。
ご覧いただきありがとうございます。
コメント