【发布时间】:2016-06-14 12:17:18
【问题描述】:
我已经阅读了很多 Java 8 Optional 并且我理解这个概念,但是在我自己尝试在我的代码中实现它时仍然遇到困难。
虽然我已经在网上搜索了很好的例子,但我没有找到一个很好的解释。
我有下一个方法:
public static String getFileMd5(String filePath) throws NoSuchAlgorithmException, IOException {
AutomationLogger.getLog().info("Trying getting MD5 hash from file: " + filePath);
MessageDigest md = MessageDigest.getInstance("MD5");
InputStream inputStream;
try {
inputStream = Files.newInputStream(Paths.get(filePath));
} catch (NoSuchFileException e) {
AutomationLogger.getLog().error("No such file path: " + filePath, e);
return null;
}
DigestInputStream dis = new DigestInputStream(inputStream, md);
byte[] buffer = new byte[8 * 1024];
while (dis.read(buffer) != -1);
dis.close();
inputStream.close();
byte[] output = md.digest();
BigInteger bi = new BigInteger(1, output);
String hashText = bi.toString(16);
return hashText;
}
这个简单的方法通过将文件路径传递给文件来返回文件的 md5。 如您所见,如果文件路径不存在(或输入错误),则会抛出 NoSuchFileException 并且该方法返回 Null。
我想使用Optional而不是返回null,所以我的方法应该返回Optional <String>,对吗?
- 正确的做法是什么?
- 如果返回的字符串为空 - 我可以在这里使用
orElse(),或者这个 客户端应该使用什么样的方法?
【问题讨论】:
-
您是否真的尝试过您描述的那种方法?是什么让您认为有更好的方式来使用
Optional? -
您看过 API 文档了吗? Java Docs OptionalOracle 在Tired of Null Pointer Exceptions? Consider Using Java SE 8's Optional! 也有一些非常不错的用例和示例
-
@E_net4 - 为什么不在这里使用 Optional ?这是一个经典的例子。我想避免我的方法重新调整 null。
-
@Underbalanced - 我看过了。确实很好,但对我的情况没有帮助
-
我不明白,为什么声明抛出
IOException的方法应该在NoSuchFileException上返回任何内容,无论是null还是空的Optional。看到方法签名的每个人都希望NoSuchFileException被转发给调用者。