好吧,所以我觉得自己很笨。我在今天的Eclipse中遇到了这个问题,但我不知道这个问题是什么。
很简单。以下汇编:
MockCreationListener l = (mock, settings) -> {};
Mockito.framework().addListener(l);
以下不适用:
Mockito.framework().addListener((mock, settings) -> {});
我已经知道,这是一些愚蠢的事情,我忽略了,但这两位代码之间的区别是什么?
好吧,所以我觉得自己很笨。我在今天的Eclipse中遇到了这个问题,但我不知道这个问题是什么。
很简单。以下汇编:
MockCreationListener l = (mock, settings) -> {};
Mockito.framework().addListener(l);
以下不适用:
Mockito.framework().addListener((mock, settings) -> {});
我已经知道,这是一些愚蠢的事情,我忽略了,但这两位代码之间的区别是什么?
2条答案
按热度按时间o2rvlv0m1#
我解决了。
对于后代来说,答案是mockito.framework().addlistener()需要一个mocklistener接口,而不是mockcreationlistener。
为什么这很重要?因为mockcreationlistener定义了lambda实现的方法,而java不知道lambda也是mocklistener的有效实现,因为mocklistener没有方法。
我要关门了,为浪费大家的时间道歉。
68bkxrlz2#
这是因为
addListener
接受MockListener
接口。它是一个没有方法的标记接口。如您所知,lambda只能转换为只有一个抽象方法的接口。所以java无法将lambda转换为
MockListener
. 如果没有任何其他信息,它就不知道应该将lambda转换为什么函数接口,因此它会输出一个错误。当然,你知道应该
MockCreationListener
,但是编译器不能仅仅通过查看上下文来理解它。可能是任何MockListener
并接受两个参数和返回值void
,就编译器而言。