繁体   English   中英

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。 检查这个更多。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM