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

为什么我不能用下面的代码成功编译?[副本]

丁曦
2023-03-14
public class PoiSheetUtil{
    public Workbook mergeExcelFiles(Workbook book, Map<Integer,InputStream> inMap) throws IOException, 
    InvalidFormatException{
        inMap.forEach((k,v)->{
            Workbook b = WorkbookFactory.create(v);
           //omit copy sheet method
            copySheets(book.createSheet(),b.getSheetAt(k));
        });
        return book;
    }
}

我在第5行得到一个错误,上面说“未处理的异常IOException,InvalidFormatException”

共有1个答案

黄泰宁
2023-03-14

这里的问题是背景;可能引发异常的代码位于lambda中:

inMap.forEach((k,v)->{
    Workbook b = WorkbookFactory.create(v);
    ...
});

在这种情况下,lambda表达式不能正确处理异常。试试

inMap.forEach((k,v)->{
    try {
        Workbook b = WorkbookFactory.create(v);
        ...
     } catch (IOException | InvalidFormatException exc) {
         throw new RuntimeException(exc);
     }
  });

或者使用其他类型的迭代构造(例如,基于迭代器的for语句),可以透明地传播异常:

for (var entry: inMap.entrySet()) {
     final var k = entry.getKey();
     final var v = entry.getValue();
     ...
}
 类似资料:
  • 此代码可编译但不运行;当我试图运行这个程序时,它会给出一个。我做错了什么?

  • 我正在做一项任务来编译Pascal的子集,在初始程序中有一行代码如下: 这让我非常困惑,因为返回一个布尔值或,因此{Bool,Int}中的 中的

  • 介绍 再练习一次循环。这个程序会比前一个更多一些。 在这种情况下,对手将是计算机。 任务1 这个游戏需要两个6面骰子。你将需要用随机数生成器模拟这些骰子。 每转一圈,玩家将轮流掷两个骰子。如果任何一个骰子上都没有出现1,则这些值将加到玩家的总数中。然后他们可以选择再次滚动(选择0),或者将回合传递给另一个玩家(选择1)。如果在其中一个骰子上出现1,则该玩家在整个回合中的总积分不会增加,而是成为另一

  • 每次我整理这个的时候 这是输出 有人知道为什么吗?

  • 我有一个简单的测试设置,如 但当我尝试编译测试时,我会遇到53个错误,比如 实际上并没有传达任何关于问题所在的有用信息。我只能假设在我的构建中没有正确配置某些内容。sbt文件或其他地方。 这段代码确实曾经工作过,在我清理东西的过程中,事情发生了变化,现在它被破坏了,没有好的诊断。 有人能提出要找的东西吗?

  • 问题内容: 为什么要编译Python脚本?您可以直接从.py文件运行它们,并且效果很好,那么在性能上有什么优势吗? 我还注意到,我的应用程序中的某些文件被编译为.pyc,而另一些则没有,为什么? 问题答案: 它被编译为字节码,可以更快,更快速地使用。 无法编译某些文件的原因是,每次运行脚本时都会重新编译与之一起调用的主脚本。所有导入的脚本将被编译并存储在磁盘上。 Ben Blank的 重要补充: