我有一个lambda表达式,可以抛出IOException
:
Function<String, List<String>> readFile = path-> {
try {
return Files.readAllLines(
Paths.get((String) path), Charset.forName("UTF-8"));
} catch (IOException e) {
return null;
}
};
我想在不使用try {} catch {}
块的情况下编写相同的lambda表达式,以便将异常重新抛入封闭函数:
public static void main(String[] args) throws IOException {
Function<String, List<String>> readFile = path-> {
try {
return Files.readAllLines(
Paths.get((String) path), Charset.forName("UTF-8"));
} catch (IOException e) {
return null;
}
};
}
唯一的问题是我无法定义自己的接口/类,我只能使用Java API提供的接口。
这可能吗?
答案 0 :(得分:1)
如果要重新抛出例外,可以使用RuntimeException。 将它添加到你的捕获体。
throw new RuntimeException(e);
答案 1 :(得分:0)
由于.pdf_page_1 tr:nth-child(n+28) { display: none; }
.pdf_page_2 tr:nth-child(-n+28) { display: none; }
.pdf_page_2 tr:nth-child(n+56) { display: none; }
.pdf_page_3 tr:nth-child(-n+56) { display: none; }
.pdf_page_3 tr:nth-child(n+84) { display: none; }
.pdf_page_4 tr:nth-child(-n+84) { display: none; }
.pdf_page_4 tr:nth-child(n+112) { display: none; }
#pdfPage tr:first-child { display: table-row !important; }
不会抛出已检查的异常,因此您无法执行此操作...
......以合法的方式。但是,你可以考虑&#34;偷偷摸摸&#34;如果你能承担风险
Function.apply
用法示例
interface FunctionX<T,R, X extends Exception> extends Function<T,R>
{
R applyX(T t) throws X;
@Override
default R apply(T t)
{
try
{
return applyX(t);
}
catch (Exception x)
{
throw Util.sneakyThrow(x);
}
}
public static <T,R,X extends Exception>
FunctionX<T,R,X> of(FunctionX<T,R,X> f){ return f; }
}
// Util.java
public static RuntimeException sneakyThrow(Throwable t)
{
throw Util.<RuntimeException>sneakyThrow0(t);
}
@SuppressWarnings("unchecked")
private static <T extends Throwable> T sneakyThrow0(Throwable t) throws T
{
throw (T)t;
}