Как правильно вернуть Optional<> метода?

Я много читал о 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, поэтому мой метод должен вернуть Optional <String>, право?

  1. Как правильно делать это правильно?
  2. Если возвращенная строка пуста - могу ли я использовать здесь orElse()Или этот метод должен использоваться на стороне клиента?

1 ответ

Решение

Правильно.

public static Optional<String> getFileMd5(String filePath)
        throws NoSuchAlgorithmException, IOException {

        return Optional.empty(); // I.o. null

    return Optional.of(nonnullString);
}

Использование:

getFileMd5(filePath).ifPresent((s) -> { ... });

или (менее приятно, как удаление необязательного)

String s = getFileMd5(filePath).orElse("" /* null */);
Другие вопросы по тегам