Sembra davvero maleodorante, e senza vedere più contesto è impossibile dirlo con certezza. Ci potrebbero essere due ragioni per farlo, sebbene ci siano alternative per entrambi.
In primo luogo, è un modo conciso per implementare la conversione parziale o lasciare il risultato con i valori predefiniti se la conversione fallisce. Cioè, potresti avere questo:
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
Naturalmente, di solito questo viene gestito utilizzando le eccezioni. Tuttavia, anche se le eccezioni devono essere evitate per qualsiasi motivo, c'è un modo migliore per farlo: pattern TryParse come opzione.
Un altro motivo è che potrebbe essere per motivi di coerenza, ad esempio fa parte di un'API pubblica in cui questo metodo viene utilizzato per tutte le funzioni di conversione per qualsiasi motivo (ad esempio altre funzioni di conversione con più output).
Java non è eccezionale nel trattare con più uscite - non può avere parametri di solo output come alcune lingue, o avere più valori di ritorno come gli altri - ma anche ancora, puoi usare gli oggetti di ritorno.
La ragione della coerenza è piuttosto zoppa, ma purtroppo potrebbe essere la più comune.
- Forse i poliziotti di stile sul posto di lavoro (o la tua base di codice) provengono da uno sfondo non Java e sono stati riluttanti a cambiare.
- Il tuo codice potrebbe essere stato una porta da una lingua in cui questo stile è più idiomatico.
- Potrebbe essere necessario che la tua organizzazione mantenga la coerenza dell'API in diverse lingue, e questo era lo stile minimo comune (è sciocco ma succede anche per Google ).
- O forse lo stile ha avuto più senso nel passato remoto e si è trasformato nella sua forma attuale (ad esempio, avrebbe potuto essere il pattern TryParse ma un predecessore ben intenzionato ha rimosso il valore restituito dopo aver scoperto che nessuno lo ha affatto controllato) .