如何在方法抛出Checked-Exception时使用Suppliers.memoize

时间:2018-02-15 15:47:02

标签: java java-8 guava

我试图在引发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转发给来电者。 建议的解决方案不是那么干净,有没有更好的方法来处理这种情况?

1 个答案:

答案 0 :(得分:6)

使用IdentityServer specs

您正在对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()));