用Java中的Lambda调用不明确的方法

dea*_*mon 8 java lambda java-8 assertj

我已经定义了一个静态assertThat方法来扩展AssertJ.此方法接受类型的lambda表达式:

@FunctionalInterface
public interface Action {
  void execute() throws Exception;
}
Run Code Online (Sandbox Code Playgroud)

签名如下所示:

public static ExceptionAssert assertThat(Action action)
Run Code Online (Sandbox Code Playgroud)

我想将此方法与静态导入一起使用.但它含糊不清.编译器不知道是否应该使用assertThat(Iterable)或我的方法.我不明白void方法如何与返回的方法冲突Iterator<T>.

知道如何解决这个冲突(没有在前面写过类名assertThat)?

Dmi*_*urg 15

您应该明确指定lambda的类型:

assertThat((Action)() -> {
    ...
});
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用其他名称,例如, assertNoException