我知道如何处理功能接口中的异常,但是我必须将异常移到我的lambda之外。 (主要应抛出IOExc)
public static void main(String[] args) throws IOException {
Function<String,List<String>> flines = f->{
//reading from input stream, but i cant use try catch
}
}
我的新接口必须继承自java.util.function。有什么想法怎么做? 这样的东西效果不佳
public interface MyFunction<T,R> extends Function<T,R> {
@Override
default R apply(T t) {
try {
return applyThrows(t);
}catch (Exception e){
throw new RuntimeException(e);
}
}
R applyThrows (T t) throws IOException;
答案 0 :(得分:1)
可以使用jOOλ及其Sneaky.function
取CheckedFunction
来完成,如下所示:
void sample() throws IOException {
Function<String, List<String>> flines = Sneaky.function(this::applyThrows);
flines.apply("");
}
List<String> applyThrows(String str) throws IOException {
throw new IOException();
}
通过Sneaky
类,您可以“偷偷摸摸”地抛出原始已检查异常。
如果您不想依赖外部库,则可以复制CheckedException
接口并根据Sneaky.function
和{{1}的代码编写自己的Unchecked.function
}。
答案 1 :(得分:1)
这里有两个方面: