【发布时间】:2018-05-16 18:28:03
【问题描述】:
我正在学习 Java 8 中的方法引用,但我很难理解为什么它会起作用?
class Holder {
private String holded;
public Holder(String holded) {
this.holded = holded;
}
public String getHolded() {
return holded;
}
}
private void run() {
Function<Holder, String> getHolded = Holder::getHolded;
consume(Holder::getHolded); //This is correct...
consume(getHolded); //...but this is not
}
private void consume(Consumer<Holder> consumer) {
consumer.accept(null);
}
正如您在 run 方法中看到的 - Holder::getHolded 返回未绑定的方法引用,您可以通过将 Holder 类型的对象作为参数传递来调用它。像这样:getHolded.apply(holder)
但是为什么当它被直接作为方法参数调用时它会将这个未绑定的方法引用转换为Consumer,而当我显式传递Function 时它不这样做呢?
【问题讨论】:
-
请注意,您还应该能够
consumer(getHolded::apply)。 -
顺便说一句,“持有”应该是“持有”。
-
@Holger :) 你无处不在!我什至没有注意到,太好了!
-
consumer(getHolded::apply)将完全符合consume(Holder::getHolded)提出的相同无效兼容性规则;)@Eugene 下面提到了该规则
标签: java-8 method-reference functional-interface