Comment retourner correctement Option<> d'une méthode?

J'ai lu beaucoup de Java 8 en Option et je comprends le concept, mais des difficultés à mettre en œuvre moi-même dans mon code.

Bien que j'ai serached le web de bons exemples, je n'ai pas trouvé un avec une bonne explication.

J'ai la méthode suivante:

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;
}

Cette simple méthode renvoie le md5 d'un fichier, en le passant le chemin d'accès au fichier.
Comme vous pouvez le constater, si le chemin d'accès au fichier n'existe pas (ou mal tapé) un NoSuchFileException faire jeter et de la méthode de retour Null.

Au lieu de retourner la valeur null, je veux utiliser en Option, donc ma méthode doit retourner Optional <String>, droit?

  1. Quelle est la bonne façon de faire?
  2. Si la Chaîne renvoyée est null - puis-je utiliser ici orElse(), ou ce
    genre de méthode doit être utilisée par le côté client?
Avez-vous essayé réellement que l'approche que vous décrivez? Ce qui vous fait penser qu'il existe une meilleure façon d'utiliser Optional?
Avez-vous pris un coup d'oeil à l'API Documents? Java Docs en Option Oracle a également quelques très jolies cas d'utilisation et des exemples dans le Fatigué de Pointeur Null Exceptions? Envisager l'Utilisation de Java SE 8 en Option!
pourquoi ne pas en Option ici? c'est un exemple classique. Je veux éviter de ma méthode retourne null.
Je l'ai regardé. très bon en effet, mais n'était pas mon cas
Je ne vois pas pourquoi une méthode déclarée à jeter IOException doit retourner quoi que ce soit sur un NoSuchFileException, il null ou un vide Optional. Tout le monde en voyant la signature de la méthode attendons à ce que le NoSuchFileException pour être transmis à l'appelant.

OriginalL'auteur Nimrod | 2016-06-14