如何在方法抛出 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

您正在标记 ,因此您应该使用针对此用例的 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()));