Cela semble effectivement malodorant, et sans plus de contexte, il est impossible de le dire avec certitude. Il pourrait y avoir deux raisons pour cela, bien qu'il existe des alternatives pour les deux.
Tout d'abord, il s'agit d'une manière concise d'implémenter une conversion partielle ou de laisser le résultat avec des valeurs par défaut en cas d'échec de la conversion. C'est-à-dire que vous pourriez avoir ceci:
public void ConvertFoo(Foo from, Foo to) {
if (can't convert) {
return;
}
...
}
Foo a;
Foo b = DefaultFoo();
ConvertFoo(a, b);
// If conversion fails, b is unchanged
Bien entendu, cela est généralement traité à l'aide d'exceptions. Cependant, même si des exceptions doivent être évitées pour une raison quelconque, il existe un meilleur moyen de procéder: le modèle TryParse étant une option.
Une autre raison est que cela pourrait être uniquement pour des raisons de cohérence. Par exemple, cela fait partie d'une API publique dans laquelle cette méthode est utilisée pour toutes les fonctions de conversion pour une raison quelconque (telle que d'autres fonctions de conversion ayant plusieurs sorties).
Java n'a pas l'habitude de gérer plusieurs sorties - il ne peut pas avoir de paramètres de sortie comme certaines langues, ni avoir plusieurs valeurs de retour comme d'autres - mais vous pouvez quand même utiliser des objets de retour.
La raison de la cohérence est plutôt boiteuse mais malheureusement, elle est peut-être la plus courante.
- Peut-être que les flics de style sur votre lieu de travail (ou votre base de code) proviennent d'un contexte autre que Java et ont été réticents à changer.
- Votre code peut avoir été un port d'une langue où ce style est plus idiomatique.
- Votre entreprise peut avoir besoin de maintenir la cohérence des API dans différentes langues. Il s’agissait du style avec le plus petit dénominateur commun (c'est idiot, mais cela arrive même pour Google ).
- Ou peut-être que le style avait plus de sens dans un passé lointain et était transformé dans sa forme actuelle (par exemple, il pourrait s'agir du modèle TryParse mais un prédécesseur bien intentionné a supprimé la valeur de retour après avoir découvert que personne ne l'avait cochée du tout).