それは確かに臭いのように見えます、そして、より多くの文脈を見ないで、それは確かに言うことは不可能です。これを行うには2つの理由がありますが、両方の選択肢があります。
まず、それは部分的な変換を実装するか、変換が失敗した場合に結果をデフォルト値のままにする簡潔な方法です。つまり、これがあるかもしれません:
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
もちろん、通常、これは例外を使用して処理されます。ただし、何らかの理由で例外を回避する必要がある場合でも、これを行うためのより良い方法があります-TryParseパターンは1つのオプションです。
別の理由は、純粋な一貫性の理由である可能性があることです。たとえば、何らかの理由でこのメソッドがすべての変換関数(複数の出力を持つ他の変換関数など)に使用されるパブリックAPIの一部です。
Javaは複数の出力を処理するのが得意ではありません。一部の言語のような出力専用のパラメーターや、他の言語のような複数の戻り値を持つことはできませんが、それでも戻りオブジェクトを使用できます。
一貫性の理由はかなり不十分ですが、悲しいことに最も一般的かもしれません。
- おそらく、職場(またはコードベース)のスタイル警官はJava以外のバックグラウンドから来たものであり、変更に消極的でした。
- あなたのコードは、このスタイルがより慣用的な言語からの移植であったかもしれません。
- 組織は異なる言語間でAPIの一貫性を維持する必要がある場合があり、これは最も一般的な分母のスタイルでした(それは簡単ですが、Googleでも起こります)。
- または、遠い過去にスタイルがより意味を持ち、現在の形式に変形した可能性があります(たとえば、TryParseパターンである可能性がありますが、一部の善意の前身は、誰もそれをまったくチェックしなかったことを発見した後、戻り値を削除しました)。