我试图在引发Suppliers#memorize
IOException
段:
private Supplier<Map> m_config = Suppliers.memoize(this:toConfiguration);
这给出了一个例外: 未处理的异常类型IOException
所以我不得不做这样的事情:
public ClassConstructor() throws IOException
{
m_config = Suppliers.memoize(() -> {
try
{
return toConfiguration(getInputFileName()));
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
});
if(m_Configuration == null) {
throw new IOException("Failed to handle configuration");
}
}
我希望CTOR将IOException
转发给来电者。
建议的解决方案不是那么干净,有没有更好的方法来处理这种情况?
答案 0 :(得分:6)
您正在对UncheckedIOException
进行标记,因此您应该使用此特例中出现的UncheckedIOException
。
/**
* @throws java.io.UncheckedIOException if an IOException occurred.
*/
Configuration toConfiguration(String fileName) {
try {
// read configuration
} catch (IOException e) {
throw new java.io.UncheckedIOException(e);
}
}
然后,你可以写:
m_config = Suppliers.memoize(() -> toConfiguration(getInputFileName()));