J'ai une question qui me dérange depuis un moment sur la méthode de contrôle de flux préférable.Contrôle de flux Java en lançant des exceptions
je rencontre souvent une situation où je dois décider quoi faire en fonction de la valeur de retour d'une méthode qui est null
ou not null
J'ai donc deux options que je connais, comment y faire face:
Vérifier null:
public class BasedOnNullFlowControl {
public String process(String login) {
String redirectUri = getRedirectUri(login);
if (redirectUri != null) {
return redirectUri;
} else {
return "Your login is taken";
}
}
private String getRedirectUri(String login) {
Optional<Login> loginFromDb = checkLoginExists(login);
if (loginFromDb.isPresent()) {
return null;
} else {
return "some-redirect-url";
}
}
private Optional<Login> checkLoginExists(String login) {
return Optional.empty(); //assume this value comes from some API
}
private class Login {}
}
ou d'interrompre le flux d'exception:
public class ExceptionFlowControl {
public String process(String login) {
return getRedirectUri(login);
}
private String getRedirectUri(String login) {
Optional<Login> loginFromDb = checkLoginExists(login);
loginFromDb.ifPresent(l -> {
throw new LoginExistsException();
});
return "some-redirect-url";
}
private Optional<Login> checkLoginExists(String login) {
return Optional.empty();
}
private class LoginExistsException extends RuntimeException {
}
private class Login {}
}
Je sais, que les exceptions ne doivent être utilisées que dans des situations exceptionnelles, mais ma situation n'est pas exceptionnelle et la deuxième solution me semble meilleure, car je peux ajouter un gestionnaire d'exceptions (comme au printemps) Code d'état Http à la fin. La méthode du contrôleur process
n'est pas contaminée par des dizaines de vérifications nuls.
Pourriez-vous des gens intelligents s'il vous plaît indiquer quelle solution devrait être utilisée? Ou peut-être qu'il y en a un troisième?
Notez que si vous utilisez 'if (Optional.isPresent())', vous remplacez simplement 'null' par' Optional', mais pas de façon sensée. – Kayaman
Maintenant, regardez le désordre que votre question a causé. – Kayaman
Merci à tous pour votre contribution, maintenant je suis convaincu, qu'il n'y a pas de réponse unique à mon problème et probablement tout dépend de qui fait l'examen du code :) Je voulais juste savoir si le contrôle du flux d'application par les exceptions est toujours un mauvais pratique même si parfois il semble être plus simple et plus propre de cette façon – nibsa