当前位置: 首页 > 知识库问答 >
问题:

在Lambda-expression[duplicate]中从main()抛出IOException

马银龙
2023-03-14

我有一个任务要将我的抛出异常从main()“移动”到lambda-expression。这意味着当在Lambda中发生异常时,程序将使用来自main的抛出。问题是,我不能创建任何其他的接口来自动实现这一功能,因为我的老师说只能使用java.util.function的接口,我也一直在网上找,但大多数答案都是“创建新的接口”。

public static void main(String[] args) throws IOException {

  Function<String, List<String>> flines = (String x) -> {
      Stream<String> streamString = Files.lines(Paths.get(x)); //Should throw Exception from main if IOException

      List<String> tmp = streamString.collect(Collectors.toList());

      return tmp;

  };

共有1个答案

东郭元魁
2023-03-14

您只能抛出未经检查的异常,因为function在其函数接口的签名中没有声明任何已检查的异常。
因此您只能从lambda主体显式抛出RuntimeException(及其子类)实例,例如:

  Function<String, List<String>> flines = (String x) -> {
      try{
        Stream<String> streamString = Files.lines(Paths.get(x)); 
        List<String> tmp = streamString.collect(Collectors.toList());
        return tmp;
      }
      catch (IOException e){
        throw new RuntimeIOException(e); 
      }

  };

但是在main()方法中声明抛出IOException是非常无助的,因为它永远不会抛出IOException但是如果您在函数客户端中捕获到运行时异常,那么您就会重新抛出一个IOException。但那是一大堆几乎什么都不需要的东西。

 类似资料:
  • 问题内容: 我有一个单线程应用程序,如果有问题,应该将DOS错误级别设置为非零。抛出RuntimeException还是使用System.exit(nonzero)更好?我不需要堆栈跟踪,也不希望此应用程序被扩展/重用。这两种选择之间有什么区别? 问题答案: 除非您确实有特殊情况,否则不要抛出异常。正是因为这个原因。用它。 编辑: 我想我可能读错了你的问题。我以为您是在问,什么时候您想正常退出JV

  • 给定Java8代码 java中的Lambdas看起来对错误处理不太友好...

  • 我有一个Spring Boot演示项目。我试图在AWS Lambda中部署它们,但我得到ClassNotFoundExcema甚至认为我上传的罐子包含必要的依赖项。 这是我的代码: 波姆。xml 应用类 控制器类 兰姆达汉德勒类

  • 在上下文路径[/VirtualStore]上部署了基于servlet的web应用程序,但上下文未能从下面的日志开始。 这是如何造成的,我该如何解决?

  • 问题内容: 当我编译下面的代码时,出现以下错误: 代码: 我已经宣布要抛出它。我想念什么? 完整代码在https://github.com/spakai/composite_indexes中 问题答案: 从Java 8开始,检查异常比Java承诺的要早得多,并且不能与它们很好地配合使用。从技术上讲,BiFunction不会声明抛出任何检查异常。因此,您传递给的,也不能将其抛出。 请通过继承选中。还

  • 我试图在lambda内部抛出一个异常,但它总是给我一个错误,表示未处理的IOException。 有人能告诉我我做错了什么吗?