我有一个读取.bz2文件的静态方法,它引发了检查的IOException和org.apache.commons.compress.compressors.CompressorException。函数签名为:
import timeit
import random
for i in range(10000,1000001,20000):
t = timeit.Timer("del x[random.randrange(%d)]" % i, "from __main__ import random, x")
x = list(range(i))
lst_time = t.timeit(number=1000)
x = {j:None for j in range(i)}
d_time = t.timeit(number=1000)
print("%d,%10.3f,%10.3f" % (i, lst_time, d_time))
尝试在Java8流中直接使用此方法会在Intellij中获得编译时错误;
private static MyClass readFile(String fileName) throws IOException, CompressorException{
//…
}
因此,在听取here的建议之后,我尝试了以下操作,但始终坚持如何处理CompressorException对象。在ctor之后,我尝试了以下操作,但是Intellij仍然抱怨CompressorException未处理:
unhandled exceptions: java.io.IOException, org.apache.commons.compress.compressors.CompressorException
谢谢
答案 0 :(得分:2)
正如@JB Nizet在评论中提到的那样,您不能从Exception
函数内的lambda函数中抛出任何foreach
。
您需要替换当前的实现:
catch (Throwable ex){
throw new CompressorException("compressorException", ex);//error!!!
}
以下内容或完全不抛出RuntimeException
。
catch (Throwable ex){
throw new RuntimeException("compressorException", ex);
}
发生上述行为的原因是Stream.foreach()
方法具有以下签名,并且不会在签名中抛出任何异常。
void forEachOrdered(Consumer<? super T> action)