宿州市做网站的公司,php模拟登陆wordpress,肇庆网络推广,宁波公司网站开发招聘因此#xff0c;我对JDK 8中Optional接口的两个限制感到沮丧。第一个问题是#xff0c;没有明显的方法可以在块中执行else操作#xff0c;因为只有isPresent方法#xff0c;除非您使用的是老式的if语句。 第二个问题当然是古老的板栗#xff0c;即使您能够做到#xff0c… 因此我对JDK 8中Optional接口的两个限制感到沮丧。第一个问题是没有明显的方法可以在块中执行else操作因为只有isPresent方法除非您使用的是老式的if语句。 第二个问题当然是古老的板栗即使您能够做到这些方法也将无法引发已检查的异常。 是的您可以包装RuntimeException但这不是最漂亮的。 我发现的解决方法是使用map函数作为成功案例使用orElseGet返回失败案例。 在两个分支中代码都有一个lambda返回lambda来返回ThrowingRunnable的实例。 然后在最后调用run() 它可以引发任何想要的异常。 FunctionalInterface
public interface ThrowingRunnableE extends Throwable {public void run() throws E;
}OptionalCredential credential ....credential.ThrowingRunnableIOExceptionmap(auth - () - {PasswordWrapper pw auth.getToken();... // something that might throw an IOException}).orElseGet(() - () - {response.setStatus(401);LOGGER.log(Level.INFO, credential is not found);}).run(); 对于这个特定的用例这可能是过多的 但是我可以看到该技术在其他地方很有用值得了解它的外观因此在其他代码中也不足为奇。 翻译自: https://www.javacodegeeks.com/2016/03/lambda-lambda-ifelse-optional.html