Runnable runnable = new Runnable() {
@Override
public void run() {
throw new RuntimeException("You cannot Pass!");
}
};
假设我有一个像上面提到的那样的可运行的东西。 IntelliJ报告说,从Java 8开始,所有匿名类都可以被lambdas替换。
有人可以用正确的语法帮助我。
需要使用runnable作为参数调用的函数:
public void intercept(Runnable runnable) { ... }
PS:关于为什么有人需要这样的可运行不是问题,谢谢
答案 0 :(得分:2)
Lambdas可用于定义Runnable
接口,因此不需要进行太多更改:
Runnable runnable = () -> {
throw new RuntimeException("You cannot Pass!");
};
()
是声明无参数的语法 - 将其与例如用于定义BiFunction<String, Integer, String>
的两个参数列表:
BiFunction<String, Integer, String> fooBarConcatenator = (foo, bar) -> foo + bar;
答案 1 :(得分:1)
Runnable
的方法不带参数,因此代码如下:
Runnable r = () -> { throw new RuntimeException(); };
但是,请注意,您将无法抛出已检查的异常,因为Runnable的run()
没有定义的已检查异常。要实现这一点,您必须定义自己的功能接口并定义包装Runnable的lambda。请查看this了解更多信息。
此外,许多现代IDE(特别是Intellij)为您提供了自动替换此类替换的提示。因此,请在屏幕左侧检查一个小警告图标,单击该图标时将自动使用相应的lambda表达式替换您的代码。或者,单击特定行中的 Alt + Enter ( Cmd + 输入 for Mac)。