私は次のコードを持っている:それは方法は、最初の引数で呼び出さなっている「含まれ」と二番目の引数が渡されていることがいかに声明listContains.test(aListの、20)では、Java 8 BiPredicateが最初の引数でメソッドを自動的に呼び出しますか?
public class BiPredicateTest {
public static void main(String[] args) {
BiPredicate<List<Integer>, Integer> listContains = List::contains;
List aList = Arrays.asList(10, 20, 30);
System.out.println(listContains.test(aList, 20)); // prints true magically?
}
}
をパラメータとして?同等の何か:つまり
System.out.println(aList.contains(20));
は、どのように声明listContains.test(aListの、20)がaList.contains(20)に変換されますでしょうか?
これはJava 8 BiPredicateの仕組みですか?誰かが魔法がどのように起こっているのかを説明することができますか?
これは重複した投稿ではありません。これは、Java 8では「特定の型の任意のオブジェクト」が意味する「何か」とは異なりますか?明示的に渡すメソッドではなく、そのメソッドを参照しています。あなたが参照する投稿の中でメソッド参照がどのように渡されているかは非常に明確です。メソッドが呼び出されている配列インスタンスは、引数としてArrays.sort()に渡されます。私の場合、どのようにメソッドが "含まれている" aListに呼び出されているかは明らかではありません。私はその働き方についての参考や説明を探しています。
参照や説明の代わりに投票を辞退したい人もいます。彼らは知識を持っているが、それを共有することを拒否しているという印象を与える。
「BiPredicate」に固有のものではありません。メソッド参照がどのように機能するかを調べることができます。 – 4castle
@ 4castle返信いただきありがとうございます。 BiPredicateリファレンス 'listContains'で 'test'メソッドを呼び出すと、List :: containsメソッドが呼び出されることを理解しています。しかし、それが呼び出されるオブジェクトはどのように選択されますか(この例ではaList)?この例では完全にはっきりしていません。 BiPredicateを使用しない例がありますか? – Ali
[参考資料](http://moandjiezana.com/blog/2014/understanding-method-references/)が便利です。 「Desugaring Lambdas」のセクションを見てください。 – Enwired