Ami*_*.io 1 java-8 method-reference
我在Java 8中玩.如何返回方法引用?
我能够返回lambda而不是方法引用.
我的尝试:
public Supplier<?> forEachChild(){
return new ArrayList<?>::forEach;
}
Run Code Online (Sandbox Code Playgroud)
要么
public Function<?> forEachChild(){
return new ArrayList<?>::forEach;
}
Run Code Online (Sandbox Code Playgroud)
首先,你不能new进行方法参考.
然后,让我们通过你想做的事情来推理.您希望该方法forEachChild能够返回接受a List和a的内容Consumer.的List将是对哪个对象调用forEach上,并且Consumer将是作用于列表的每个元素执行.为此,您可以使用BiConsumer:这表示采用2个参数并且不返回结果的操作:第一个参数是列表,第二个参数是使用者.
因此,以下将起作用:
public <T> BiConsumer<List<T>, Consumer<? super T>> forEachChild() {
return List::forEach;
}
Run Code Online (Sandbox Code Playgroud)
这种类型的方法引用称为"引用特定类型的任意对象的实例方法".会发生的是,类型的第一个参数List<T>成为forEach将要调用的对象,方法是将其作为参数Consumer.
然后你就可以使用它:
forEachChild().accept(Arrays.asList("1", "2"), System.out::println);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |