为什么我用下面的代码编译不成功?
why I can't compile successfully with the following code?
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”
这里的问题是上下文;可能引发异常的代码位于 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();
...
}
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”
这里的问题是上下文;可能引发异常的代码位于 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();
...
}