我知道可以将一个方法的引用传递给另一个方法,像这样:
foo(Bar::doBar); // or e.g.
foo(bar::doBar); // or e.g.
foo(this::doBar);
有没有可能将引用传递给new
运算符?
Android Studio建议我将以下行替换为:
(a, b) -> new Pair<>(a, b)
使用对新方法的方法引用。但是我该怎么做呢?
我知道可以将一个方法的引用传递给另一个方法,像这样:
foo(Bar::doBar); // or e.g.
foo(bar::doBar); // or e.g.
foo(this::doBar);
有没有可能将引用传递给new
运算符?
Android Studio建议我将以下行替换为:
(a, b) -> new Pair<>(a, b)
使用对新方法的方法引用。但是我该怎么做呢?
构造函数引用是方法引用表达式的一种特殊情况。术语上说,引用不是指运算符,而是指特定的构造函数。例如,如果Pair<T>
有多个构造函数,则根据静态上下文将选择正确的构造函数。
引用构造函数的不同方式(来自JLS):
ArrayList<String>::new // constructor for parameterized type
ArrayList::new // inferred type arguments
// for generic class
Foo::<Integer>new // explicit type arguments
// for generic constructor
Bar<String>::<Integer>new // generic class, generic constructor
int[]::new // array creation
ArrayList::new
从不引用原始构造函数。 - Andrew TobilkoPair<>::new
Optional.orElseThrow
的首选方式:list.stream().filter(...).findFirst().orElseThrow(MyException::new)
new
是一个关键字,所以不能有一个名为new
的方法,如果这个意思应该是构造函数还是方法就不会有歧义。.orElseThrow(MyException::new)
这种写法并不理想——它既没有设置信息也没有设置原因...只是一种花哨的语法 :) - Andrew Tobilko