我已經閱讀了很多Java 8可選的,並且我理解這個概念,但是在嘗試在我的代碼中自己實現它時仍然遇到困難。如何正確返回方法的可選<>?
儘管我已經通過網絡爲例子做了很好的介紹,但是我沒有找到一個很好的解釋。
我有一個方法:
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 <String>
,對不對?
- 什麼是正確的做法呢?
- 如果返回的字符串爲空 - 我可以在這裏使用
orElse()
,或者這個 類型的方法應該由客戶端使用嗎?
你有沒有真正嘗試這種方法你描述?是什麼讓你覺得有更好的方法來使用'Optional'? –
你有沒有看過API文檔? [Java文檔可選](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html)Oracle還有一些相當不錯的用例和例子[厭倦了空指針異常?考慮使用Java SE 8的可選!](http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html) – Underbalanced
@ E_net4 - 爲什麼不在這裏使用Optional?這是一個典型的例子。我想避免我的方法重新調用null。 – Nimrod