【发布时间】:2015-02-26 16:18:25
【问题描述】:
是否可以这样做:
boolean isItMyMethod( Consumer<Object> aConsumer )
{
return aConsumer.equals( this::myMethod );
}
这不会编译。如果我将 this::myMethod 分配给中间变量,它会这样做,但结果总是错误的。
【问题讨论】:
-
myMethod 的类型是什么?
-
用例是什么?
-
你为什么要这样做?顺便说一句,直接传递方法引用是行不通的,因为 lambda 和方法引用的目标类型应该是函数式接口,而
Object不是这样。 -
无论如何,你不能依赖
.equals的 lambda 或方法引用来返回一致的结果。 -
或者,换句话说,对于当前的实现,您可以说
Consumer<Object> c1=this::myMethod, c2=this::myMethod;,c1==c2或c1.equals(c2)都将评估为false。因此,您可以将代码修复为aConsumer.equals((Consumer<Object>) this::myMethod ),但它始终会产生false(使用当前的JRE 实现)。另见stackoverflow.com/q/28190304/2711488