如何在方法抛出 Checked-Exception 时使用 Suppliers.memoize
How to use Suppliers.memoize when method throws Checked-Exception
我正在尝试在抛出 IOException
的函数上使用 Suppliers#memorize
片段:
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
转发给来电者。
提出的解决方案不是那么干净,有没有更好的方法来处理这种情况?
使用UncheckedIOException
您正在标记 java-8,因此您应该使用针对此用例的 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()));
我正在尝试在抛出 IOException
Suppliers#memorize
片段:
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
转发给来电者。
提出的解决方案不是那么干净,有没有更好的方法来处理这种情况?
使用UncheckedIOException
您正在标记 java-8,因此您应该使用针对此用例的 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()));