- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试在我的代码中使用 Java 8 方法引用。有四种类型的方法引用可用。
使用静态方法引用
和构造函数引用
我没问题,但是Instance Method (Bound receiver)
和Instance Method ( UnBound receiver)
真的让我很困惑。在 Bound
接收器中,我们使用对象引用变量来调用如下方法:
objectRef::Instance Method
在 UnBound
接收器中,我们使用类名来调用如下方法:
ClassName::Instance Method.
我有以下问题:
Bound
和 Unbound
接收器方法引用有什么区别?Bound
接收器,在什么地方使用Unbound
接收器?我还从Java 8 language features books 找到了Bound
和Unbound
接收器的解释。 , 但仍然与实际概念混淆。
最佳答案
String::length
等 unBound 接收者的想法是你指的是一个将作为 lambda 参数之一提供的对象的方法。例如,lambda 表达式 (String s) -> s.toUpperCase()
可以重写为 String::toUpperCase
。
但是有界指的是你在一个方法中调用一个方法的情况lambda 到一个已经存在的外部对象。例如,lambda 表达式 () ->expensiveTransaction.getValue()
可以重写为 expensiveTransaction::getValue
。
方法引用的三种不同方式的情况
(args) -> ClassName.staticMethod(args)
可以是 ClassName::staticMethod
//这是静态的(你也可以认为是未绑定(bind)的)
(arg0, rest) -> arg0.instanceMethod(rest)
可以是 ClassName::instanceMethod
(arg0
是 ClassName
类型)//这是未绑定(bind)的
(args) -> expr.instanceMethod(args)
可以是 expr::instanceMethod
//This is Bound
从 Java 8 in Action 一书中检索到的答案
关于Java 8 : Difference between method reference Bound Receiver and UnBound Receiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35914775/
我遇到了一个小问题,请求您的帮助!使用 BeanIO 2.1 并处理固定长度文件,我当前正在尝试检索结构如下的记录 :28C:5n/5n ':28C:':修复 5 个数字(最多) '/':修复 5 个
我使用的 drscheme 来自: http://www.archlinux.org/packages/extra/x86_64/drscheme/ 我正在尝试使用教科书中的示例代码,但我不断收到“未
我正在尝试将一个整数参数 N 传递给 cake 并返回一个大小为 N 的 2 平方的列表(为了举例)。例如面包店:cake(3) => [4,4,4] 这是我迄今为止尝试过的: -module(bak
我正在使用 SLIME 来调试我的 Common Lisp 函数。在函数内部,我让它人为地发出错误信号(尝试“调试”——也许我应该单步执行),如下所示: (define-condition unkno
这让我陷入了困境(抱歉,我对 python 还是很陌生)感谢您提供任何形式的帮助。 错误 print Student.MostFrequent() TypeError: unbound method
自从我尝试将代码重构到不同的文件中以来,这个 Python 问题一直困扰着我。我有一个名为 object.py 的文件,其中的相关代码是: class Object: #this is a gener
需要一个关于如何将原始类型集合传递给未绑定(bind)函数/或操作以及如何返回原始类型集合的示例。 例如整数列表或数组。 这是一个简单的例子。 List GetEvenNumbers(List num
我使用 xsd.exe/out 从 XML 片段生成了一个 XSD 文件 它所做的是为某些元素创建 maxOccurs="unbounded" 属性。 如果我只希望该元素出现一次,而不是一个集合,我应
问题 为什么情况 2 会导致“未绑定(bind)占位符参数”,而情况 1 却可以? 案例1 val h: (Int => Int) = (x:Int) => { scala.util.Random.n
问题 为什么情况 2 会导致“未绑定(bind)占位符参数”,而情况 1 却可以? 案例1 val h: (Int => Int) = (x:Int) => { scala.util.Random.n
我试图在 Maven 下使用 wro4j(1.6.2 和 1.6.3-SNAPSHOT),但我遇到了 jquery.tablesorter.js 的问题插件。 在第 972 行(或附近)有一个 ecl
我想在一个时间窗口内尝试 avg() 聚合代码 select user_id,timestamp avg(y) over(range between '5 second' preceding and
我以前从未见过这个错误: TypeError:必须使用 test_imports 实例作为第一个参数调用未绑定(bind)方法 halt_listener()(取而代之的是 Queue 实例) 当我运
考虑以下示例 Simulink (Download example)系统: 输入是一个幅度和一个不断增加的角度,它将返回两个正弦,如预期的实部和虚部: 从实部和虚部计算幅度是没有问题的。获取域中的角度
对于我的高级高等计算类(class),我需要做一个项目,我的任务是制作太空入侵者,我以前从未使用过Python,到目前为止我对自己的进展非常满意,但是我最近遇到了一个我不知道的错误如何处理。代码如下。
我想创建一个python类来封装一些全局变量: class TestEnvironment(object): _on_out = None # ... @staticmetho
虽然最近将一个新项目导入到 eclipse 中,但有一次当我尝试添加 GROOVY_SUPPORT 库时,它会显示为“未绑定(bind)”并出现错误-X,如下所示: 它也没有像我预期的那样出现在包资源
如何在类定义后使类方法静态化?也就是说,为什么第三种情况会失败呢? >>> class b:... @staticmethod... def foo():... pass...>>> b.fo
我在完成项目后收到两条错误消息: 在解决构建路径错误之前无法构建项目。 未绑定(bind)的类路径容器:项目“method_test”中的“JRE 系统库 [OSGi/Minimum-1.2]” 我认
此代码显示未绑定(bind)异常,我尝试了所有组合..无法解决!! 整个代码是: 最佳答案 你需要这个 xmlns:android="htt
我是一名优秀的程序员,十分优秀!