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) 在特定行中。
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) 在特定行中。