返回方法参考

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)

Tun*_*aki 6

您对方法引用的工作方式有一点误解.

首先,你不能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)