相关疑难解决方法(0)

有没有办法比较lambdas?

假设我有一个使用lambda表达式(闭包)定义的对象列表.有没有办法检查它们,以便可以进行比较?

我最感兴趣的代码是

    List<Strategy> strategies = getStrategies();
    Strategy a = (Strategy) this::a;
    if (strategies.contains(a)) { // ...
Run Code Online (Sandbox Code Playgroud)

完整的代码是

import java.util.Arrays;
import java.util.List;

public class ClosureEqualsMain {
    interface Strategy {
        void invoke(/*args*/);
        default boolean equals(Object o) { // doesn't compile
            return Closures.equals(this, o);
        }
    }

    public void a() { }
    public void b() { }
    public void c() { }

    public List<Strategy> getStrategies() {
        return Arrays.asList(this::a, this::b, this::c);
    }

    private void testStrategies() {
        List<Strategy> strategies = getStrategies();
        System.out.println(strategies);
        Strategy a = (Strategy) …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

76
推荐指数
3
解决办法
1万
查看次数

Java方法引用是否稳定?

如果我使用新语法获取方法引用:

anObject::aMethod
Run Code Online (Sandbox Code Playgroud)

我总是得到同一个对象吗?也就是说,我可以相信对同一方法的两个引用是相同的吗?

例如,我很乐意知道是否计划将它们用作Runnable我可以添加和删除的回调:

someLibrary.addCallback(anObject::aMethod)
// later
someLibrary.removeCallback(sameObject::sameMethod)
Run Code Online (Sandbox Code Playgroud)

这是否需要在Runnable变量中保存引用以保持其稳定?

java java-8

23
推荐指数
2
解决办法
1308
查看次数

两个确切的方法参考不相等

以下测试失败

@Test
public void test() {
    Function<String, Integer> foo = Integer::parseInt;
    Function<String, Integer> bar = Integer::parseInt;
    assertThat(foo, equalTo(bar));
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让它通过?

编辑:我会尝试更清楚地说明我正在尝试做什么.

可以说我有这些课程:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在让我说我想为B编写单元测试:

@Test
public void test() {
  A a = mock(A.class);
  B b = new B(a);
  b.bar();
  verify(a).foo(Integer::parseInt);
}
Run Code Online (Sandbox Code Playgroud)

问题是测试失败,因为方法引用不相等.

java java-8

15
推荐指数
1
解决办法
3624
查看次数

标签 统计

java ×3

java-8 ×3

lambda ×1