Runnable 抛出异常可以用 Lambda 代替吗?

Runnable Throwing Exception Can be Replaced By Lambda?

Runnable runnable = new Runnable() {
   @Override
   public void run() {
       throw new RuntimeException("You cannot Pass!");
   }
};

假设我有一个像上面提到的那样的可运行的。 IntelliJ 报告说,从 Java 8.

开始,所有匿名 类 都可以被 lambda 替换

谁能用正确的语法帮助我。

需要以runnable为参数调用的函数:

public void intercept(Runnable runnable) { ... }

PS:至于为什么有人需要这样的可运行程序不是这里的问题,谢谢

Lambda 可用于定义Runnable 接口,因此不需要太多更改:

Runnable runnable = () -> {
   throw new RuntimeException("You cannot Pass!");
};

() 是声明无参数的语法——将其与例如用于定义 BiFunction<String, Integer, String>:

的两个参数的列表
BiFunction<String, Integer, String> fooBarConcatenator = (foo, bar) -> foo + bar;

Runnable的方法没有参数,所以代码如下:

Runnable r = () -> { throw new RuntimeException(); };

但是请注意,您将无法抛出已检查异常,因为 Runnable 的 run() 没有定义可抛出的已检查异常。为此,您必须定义自己的功能接口并定义一个包装 Runnable 的 lambda。检查 this 了解更多。

此外,许多现代 IDE(尤其是 Intellij)会为您提供像这样自动替换替换的提示。因此,检查屏幕左侧是否有一个小警告图标,单击该图标会自动将您的代码替换为相应的 lambda 表达式。或者,单击 Alt + 输入 ( Cmd + 输入对于 Mac) 在特定行中。