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?
- Quelle est la bonne façon de faire?
- 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
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
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
Vous devez vous connecter pour publier un commentaire.
Droit.
Utilisation:
ou (moins agréable à l'annulation de l'Option)
en défaisant je voulais dire que de nouveau, vous avez une Chaîne, vous devez vérifier si elle peut être utilisée comme MD5. Ayant une valeur null alors être encore plus clair: un fail-fast lorsqu'il n'est pas cochée - une NullPointerException. Mais vous avez droit à un diplôme. Pourrait être utile pour le stockage, une option de MD5.
merci encore et désolé pour demander de nouveau à la ligne de fond - pensez-vous que l'option est essentiel ici? Le retourné null est quelque chose à la main je me lance dans ma méthode, et ce n'est pas un classique nullPointerException.
Désolé, je voulais dire, que lors de l'utilisation d'une chaîne de caractères, même si elle n'est pas un MD5 - null ou "" par exemple. Il pourrait, à tort, d'être soumis à un MD5 de déchiffrement/cryptage sans contrôle. Ensuite, null, permettrait de donner une meilleure échec de "clé non valide." - à savoir "programmeur, veuillez attraper le NullPointerException".
OriginalL'auteur Joop Eggen