Realmente parece mal cheiroso, e sem ver mais contexto é impossível dizer com certeza. Pode haver duas razões para fazer isso, embora existam alternativas para ambas.
Primeiro, é uma maneira concisa de implementar a conversão parcial ou deixar o resultado com valores padrão se a conversão falhar. Ou seja, você pode ter o seguinte:
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
Obviamente, isso geralmente é tratado usando exceções. No entanto, mesmo que exceções precisem ser evitadas por qualquer motivo, existe uma maneira melhor de fazer isso - o padrão TryParse é uma opção.
Outro motivo é que pode ser por motivos de consistência pura, por exemplo, faz parte de uma API pública em que esse método é usado para todas as funções de conversão por qualquer motivo (como outras funções de conversão com várias saídas).
O Java não é bom em lidar com várias saídas - ele não pode ter parâmetros somente de saída, como algumas linguagens, ou ter vários valores de retorno como outros -, mas mesmo assim, você pode usar objetos de retorno.
A razão da consistência é um pouco ruim, mas, infelizmente, pode ser a mais comum.
- Talvez os policiais de estilo no seu local de trabalho (ou na sua base de código) venham de um background não Java e tenham relutado em mudar.
- Seu código pode ter sido uma porta de um idioma em que esse estilo é mais idiomático.
- Talvez sua organização precise manter a consistência da API em diferentes idiomas e esse foi o estilo de denominador comum mais baixo (é idiota, mas acontece até no Google ).
- Ou talvez o estilo tenha feito mais sentido no passado distante e tenha se transformado em sua forma atual (por exemplo, poderia ter sido o padrão TryParse, mas algum antecessor bem-intencionado removeu o valor de retorno depois de descobrir que ninguém o verificava).