Java 8 返回方法引用

Java 8 返回方法引用,java-8,method-reference,Java 8,Method Reference,我正在玩Java8。如何返回方法引用 我可以返回lambda,但不能返回方法引用 我的尝试: public Supplier<?> forEachChild(){ return new ArrayList<?>::forEach; } 公共供应商forEachChild(){ 返回新的ArrayList::forEach; } 或 公共函数forEachChild(){ 返回新的ArrayList::forEach; } 您对工作原理有一点误解 首先,您不能

我正在玩Java8。如何返回方法引用

我可以返回lambda,但不能返回方法引用

我的尝试:

public Supplier<?> forEachChild(){
     return new ArrayList<?>::forEach;
}
公共供应商forEachChild(){
返回新的ArrayList::forEach;
}

公共函数forEachChild(){
返回新的ArrayList::forEach;
}

您对工作原理有一点误解

首先,您不能
new
方法引用

然后,让我们通过你想做的事情来推理。您希望方法
forEachChild
能够返回将接受
列表
消费者
的内容。
列表
将是调用
forEach
的对象,而
消费者
将是对列表中的每个元素执行的操作。为此,您可以使用:这表示一个使用2个参数但不返回结果的操作:第一个参数是列表,第二个参数是使用者

因此,以下措施将起作用:

public <T> BiConsumer<List<T>, Consumer<? super T>> forEachChild() {
    return List::forEach;
}

你对工作原理有一点误解

首先,您不能
new
方法引用

然后,让我们通过你想做的事情来推理。您希望方法
forEachChild
能够返回将接受
列表
消费者
的内容。
列表
将是调用
forEach
的对象,而
消费者
将是对列表中的每个元素执行的操作。为此,您可以使用:这表示一个使用2个参数但不返回结果的操作:第一个参数是列表,第二个参数是使用者

因此,以下措施将起作用:

public <T> BiConsumer<List<T>, Consumer<? super T>> forEachChild() {
    return List::forEach;
}

我想补充几点

无法实例化无界类型实例

List<?> list = new ArrayList<?>();
List List=new ArrayList();
其次,正如Tunaki所提到的,在进行方法引用时,不能引用
新的MyObject::staticMethod

另一件事是,
forEach(消费者)
(管道流的终端操作)不返回任何内容。它只吃我们喂它的东西


-希望这能有所帮助:)

我想补充几点

无法实例化无界类型实例

List<?> list = new ArrayList<?>();
List List=new ArrayList();
其次,正如Tunaki所提到的,在进行方法引用时,不能引用
新的MyObject::staticMethod

另一件事是,
forEach(消费者)
(管道流的终端操作)不返回任何内容。它只吃我们喂它的东西


-希望这能有所帮助:)

虽然不允许使用
new ArrayList()
,但是
List List=new ArrayList()
工作顺利,只是因为在该上下文中使用
new ArrayList()
new ArrayList()
并不重要。此外,您可以引用新对象的实例方法(注意,
forEach
不是
static
),例如
Consumer c=new ArrayList()::forEach
是一个有效的语句,虽然没有多少用处。你确实是对的<代码>新建ArrayList()是旧的Java方式。在Java1.5之前。在仿制药问世之前,没有
newarraylist()
是Java 7和更新的方式。这在早期版本中无法编译。仔细看,哎呀!。我的错。它有菱形操作符。:)虽然不允许使用
new ArrayList()
List List List=new ArrayList()
工作顺利,只是因为在该上下文中使用
new ArrayList()
new ArrayList()
并不重要。此外,您可以引用新对象的实例方法(注意,
forEach
不是
static
),例如
Consumer c=new ArrayList()::forEach
是一个有效的语句,虽然没有多少用处。你确实是对的<代码>新建ArrayList()是旧的Java方式。在Java1.5之前。在仿制药问世之前,没有
newarraylist()
是Java 7和更新的方式。这在早期版本中无法编译。仔细看,哎呀!。我的错。它有菱形操作符。:)