ラムダ式が実装しているメソッドの見分け方を教えてください
JAVA silverの黒本を教材に勉強しています。
java
1public static void main(String[] args){ 2 List<String> list = new ArrayList<>( 3 Arrays.asList(new String[]("A","B","C"}) 4 ); 5 list.removeIf( 6 (String s) -> { 7 return s.equals("B"); 8 } 9 ); 10 System.out.println(list); 11}
上記コードの設問がありまして、コンパイル実行したときの結果を問われました。
ここで分からなかった点が、ラムダ式で記述された部分です。
関数型インターフェースのPredicateのtestを実装しているとのことですが、
初見でこのコードを見たときにどうやってそれを判別しているかがわかりません。
どのようにして見分けるのか、どなたかお教えください。
よろしくお願いいたします。
> Predicateのtest
をしらべてみたらわかりそうです。
Predicateのtest自体は把握しています。
removeIfがbooleanを求めており、testであれば引数を受け取り評価するためマッチする。これもわかります。
しかし世にはbooleanを返すメソッドなど沢山あると思いますが、なぜPredicateを実装していると断定できるのでしょうか。
> なぜPredicateを実装していると断定できるのでしょうか。
list.removeIf が test を要求することは、宣言されているのでわかります。
ラムダ式の方は、シグネチャが同じためそのように推論されます。
Predicate インタフェースの test メソッドは、
https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/Predicate.html#test-T-
boolean test(T t)
となっています。なので、String.equals() メソッドが boolean 値(true or false)を返すことから、この lambda 式が Predicate インタフェースを実装していることが判ります。例えば、
return s.equals("B");
を
return 1;
に変更して実行してみてください。
回答1件
あなたの回答
tips
プレビュー