问题描述
private void writeObject(ObjectOutputStream oos) throws IOException
在正文中,我写了一些HashMap的keySet
for(E e : map.keySet()) {
oos.writeObject(e);
}
看起来不错 但是,如果我想将这段代码替换为
map.forEach((k,v) -> oos.writeObject(k));
我必须用try / catch包围它。像这样
map.forEach((k,v) -> {
try {
oos.writeObject(k);
} catch (IOException e) {
e.printstacktrace();
}
});
我不明白为什么
更新,如果我在方法标题中声明要扔掉它,为什么我需要在方法主体中处理异常。
解决方法
那是因为forEach()将Consumer作为参数。并且未声明Consumer引发任何检查的异常。因此,您的lambda也应该是Consumer,并且不要抛出任何已检查的异常。因此,任何经过检查的异常都应在您的lambda体内捕获。
,try 块将执行敏感代码,该代码可能引发异常 每当在try块中引发(捕获到的类型的)异常时,将使用 catch 块
方法原型中的 throws 关键字用于指定您的方法可能抛出指定类型的异常。当您检查了不想捕获到当前方法中的异常(必须处理的异常)时,这很有用。