【发布时间】:2018-11-17 19:12:11
【问题描述】:
如果我使用新语法获得方法引用:
anObject::aMethod
我总是得到同一个对象吗?也就是说,我可以相信对同一方法的两个引用是相等的吗?
很高兴知道,例如,我是否计划将它们用作我可以添加和删除的 Runnable 回调:
someLibrary.addCallback(anObject::aMethod)
// later
someLibrary.removeCallback(sameObject::sameMethod)
这是否需要将引用保存在 Runnable 变量中以保持稳定?
【问题讨论】:
-
removeCallback()是如何实现的? -
Lambda 没有
equals和hashCode- 请参阅LambdaMetafactory。 -
顺便说一句,我不认为这是重复的。方法引用使用不允许在闭包中捕获变量的语法,
this除外。不清楚这是否遵循与 lambda 表达式相同的规则(完全有理由不是稳定的引用)