两个确切的方法引用不相等
问题内容:
以下测试失败
@Test
public void test() {
Function<String, Integer> foo = Integer::parseInt;
Function<String, Integer> bar = Integer::parseInt;
assertThat(foo, equalTo(bar));
}
有什么办法让它通过吗?
编辑 :我将尝试使其更加清晰。
可以说我有这些课程:
class A {
public int foo(Function<String, Integer> foo) {...}
}
class B {
private final A a; // c'tor injected
public int bar() {
return a.foo(Integer::parseInt);
}
}
现在说我想为B编写单元测试:
@Test
public void test() {
A a = mock(A.class);
B b = new B(a);
b.bar();
verify(a).foo(Integer::parseInt);
}
问题是测试失败,因为方法引用不相等。
问题答案:
Lambda不被缓存,这似乎是有意的。无法比较两个lambda以查看它们是否会做相同的事情。
你需要做类似的事情
static final Function<String, Integer> parseInt = Integer::parseInt;
@Test
public void test() {
Function<String, Integer> foo = parseInt;
Function<String, Integer> bar = parseInt;
assertThat(foo, equalTo(bar));
}
Brian
Goetz的回答;有没有办法比较lambda?