我有以下代码。
<div class="form-group">
<select name="jenis_kelamin" class="form-control">
<option value="0" selected="selected" disabled="disabled">--Gender--</option>
<option value="1">Male</option>
<option value="2">Female</option>
<option value="3">Don't know</option>
</select>
</div>
这里我的private static void readStreamWithjava8() {
Stream<String> lines = null;
try {
lines = Files.lines(Paths.get("b.txt"), StandardCharsets.UTF_8);
lines.forEachOrdered(line -> process(line));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (lines != null) {
lines.close();
}
}
}
private static void process(String line) throws MyException {
// Some process here throws the MyException
}
方法抛出已检查的异常,并且我在lambda中调用该方法。此时需要从process(String line)
方法抛出MyException
而不抛出readStreamWithjava8()
。
如何使用java8执行此操作?
答案 0 :(得分:5)
简短的回答是,你不能。这是因为forEachOrdered
需要Consumer
,并且未声明Consumer.accept
会抛出任何异常。
解决方法是执行类似
的操作List<MyException> caughtExceptions = new ArrayList<>();
lines.forEachOrdered(line -> {
try {
process(line);
} catch (MyException e) {
caughtExceptions.add(e);
}
});
if (caughtExceptions.size() > 0) {
throw caughtExceptions.get(0);
}
但是,在这些情况下,我通常会在process
方法中处理异常,或者使用for-loops以旧式方式处理异常。