タグ付けされた質問 「method-reference」

2
Comparator.reversed()はラムダを使用してコンパイルしません
いくつかのUserオブジェクトを含むリストがあり、リストを並べ替えようとしていますが、メソッド参照を使用した場合にのみ機能します。ラムダ式を使用すると、コンパイラによってエラーが発生します。 List<User> userList = Arrays.asList(u1, u2, u3); userList.sort(Comparator.comparing(u -> u.getName())); // works userList.sort(Comparator.comparing(User::getName).reversed()); // works userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error エラー: com\java8\collectionapi\CollectionTest.java:35: error: cannot find symbol userList.sort(Comparator.comparing(u -> u.getName()).reversed()); ^ symbol: method getName() location: variable u of type Object 1 error

3
Java 8ではメソッド参照キャッシュは良い考えですか?
次のようなコードがあると考えてください。 class Foo { Y func(X x) {...} void doSomethingWithAFunc(Function<X,Y> f){...} void hotFunction(){ doSomethingWithAFunc(this::func); } } それhotFunctionが非常に頻繁に呼び出されるとします。それがキャッシュに賢明だろうthis::func、多分このように: class Foo { Function<X,Y> f = this::func; ... void hotFunction(){ doSomethingWithAFunc(f); } } 私がJavaメソッド参照を理解している限り、メソッド参照が使用されると、仮想マシンは匿名クラスのオブジェクトを作成します。したがって、参照をキャッシュすると、そのオブジェクトは1回だけ作成されますが、最初のアプローチでは各関数呼び出しでオブジェクトが作成されます。これは正しいです? コードのホットな位置に表示されるメソッド参照をキャッシュする必要がありますか、それともVMがこれを最適化して、キャッシュを不要にすることができますか?これに関する一般的なベストプラクティスはありますか、それともこのようなキャッシュが役立つかどうかにかかわらず、この高度にVMの実装に固有ですか?

4
ラムダの戻り値の型がコンパイル時にチェックされないのはなぜですか?
使用されたメソッド参照は戻り型を持っていIntegerます。ただし、String次の例では互換性がありません。 メソッドwith宣言を修正して、手動でキャストせずにメソッド参照型を安全にする方法は? import java.util.function.Function; public class MinimalExample { static public class Builder<T> { final Class<T> clazz; Builder(Class<T> clazz) { this.clazz = clazz; } static <T> Builder<T> of(Class<T> clazz) { return new Builder<T>(clazz); } <R> Builder<T> with(Function<T, R> getter, R returnValue) { return null; //TODO } } static public interface MyInterface …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.