Это действительно кажется вонючим, и, не видя больше контекста, невозможно сказать наверняка. Может быть две причины для этого, хотя есть альтернативы для обоих.
Во-первых, это краткий способ реализовать частичное преобразование или оставить результат со значениями по умолчанию, если преобразование не удалось. То есть вы можете иметь это:
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 является одним из вариантов.
Другая причина заключается в том, что это может быть сделано из соображений непротиворечивости, например, это часть общедоступного API, где этот метод используется для всех функций преобразования по любой причине (например, для других функций преобразования, имеющих несколько выходов).
Java не очень хорошо справляется с несколькими выходными данными - она не может иметь параметры только для вывода, такие как некоторые языки, или иметь несколько возвращаемых значений, как другие, - но, тем не менее, вы можете использовать возвращаемые объекты.
Причина последовательности довольно слабая, но, к сожалению, она может быть самой распространенной.
- Возможно, стилевые копы на вашем рабочем месте (или в вашей кодовой базе) происходят из не Java-среды и неохотно меняются.
- Ваш код мог быть портом с языка, где этот стиль более идиоматичен.
- Вашей организации может потребоваться поддерживать согласованность API на разных языках, и это был стиль с наименьшим общим знаменателем (это глупо, но это происходит даже для Google ).
- Или, возможно, стиль имел больше смысла в далеком прошлом и трансформировался в его текущую форму (например, это мог быть шаблон TryParse, но какой-то благими намерениями предшественник удалил возвращаемое значение после того, как обнаружил, что никто его вообще не проверял).