一尘不染

Java 8:方法参考绑定接收器和非绑定接收器之间的区别

java

我正在尝试在代码中使用Java 8方法引用。有四种类型的方法引用可用。

  1. 静态方法参考。
  2. 实例方法(绑定接收器)。
  3. 实例方法(UnBound接收器)。
  4. 构造函数参考。

随着Static method referenceConstructor reference我有没有问题,但Instance Method (Bound receiver)Instance Method (UnBound receiver)真搞糊涂了。在Bound接收器中,我们使用对象引用变量来调用如下方法:

objectRef::Instance Method

UnBound接收器中,我们使用类名来调用如下方法:

ClassName::Instance Method.

我有以下问题:

  1. 实例方法对不同类型的方法引用有何需求?
  2. BoundUnbound接收方方法引用之间有什么区别?
  3. 在哪里使用Bound接收器,在哪里使用Unbound接收器?

我还从Java
8语言功能书籍中
找到了对它的解释BoundUnbound接受者,但是仍然与实际概念混淆。


阅读 251

收藏
2020-09-08

共1个答案

一尘不染

诸如此类的unbound接收器的概念String::length是指对象的方法,该方法 将作为lambda的参数之一提供
。例如,lambda表达式(String s) -> s.toUpperCase()可以重写为String::toUpperCase

但是Bounded是指当您在lambda中调用 已存在外部对象 的方法时的情况。例如,lambda表达式() -> expensiveTransaction.getValue()可以重写为expensiveTransaction::getValue

三种不同方法引用方式的情况

(args) -> ClassName.staticMethod(args)ClassName::staticMethod

(arg0, rest) -> arg0.instanceMethod(rest)
可以ClassName::instanceMethodarg0是类型ClassName

(args) -> expr.instanceMethod(args)expr::instanceMethod

Java 8 Action Book中检索到的答案

2020-09-08