我努力学习assertThrows的junit5,它需要Executable作为具有第二ARGvoid execute()方法。但是,在下面的示例中,我们正在通过相同的示例传递它,LAMBDA它返回一个带有方法的双精度值double divide(int a , int b)。现在,如果下面的 lambdaexecute与Excecutable. 应该给compile error吧?
assertThrows(ArithmeticException.class,() -> m.divide(1, 0),"Failed");
Run Code Online (Sandbox Code Playgroud)
() -> m.divide(1, 0)
Run Code Online (Sandbox Code Playgroud)
被有效地对待
new Executable() {
@Override public void execute() {
m.divide(1, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
可以将 lambda 视为具有单个抽象方法的任何接口/类的实例。
Lambda 始终是多表达式,这意味着它们的确切类型取决于使用它们的上下文。
不存在兼容性问题。