Есть ли более быстрый способ сделать это?
С точки зрения производительности, нет. (Или, по крайней мере ... возможности для улучшения, вероятно, не стоит беспокоиться о.)
В терминах строк кода и удобочитаемости, вы можете реорганизовывать код, написав и используя метод, как это:
private void addIfNonempty(HashMap map, String name, String value) {
if (!StringUtils.isEmpty(value)) {
map.put(name, value);
}
}
addIfNonempty(out, A.A_NAME, foo.a);
addIfNonempty(out, B.B_NAME, foo.b);
// etcetera
Вы также можете использовать отражение, чтобы реализовать это. В зависимости от того, какие критерии предназначены для определения добавленных полей, это может уменьшить (или исключить) повторяющийся код. Но производительность, вероятно, будет на порядок более медленным, а код может be fragile; например если поля добавлены или удалены ... или «шаблон» сломан.
Есть ли более быстрый способ написания все эти кода?
Это действительно зависит от точных деталей «повторяемости» ... а также от ваших навыков работы с IDE/редактором. Например, если ваша среда разработки поддерживает что-то вроде макросов emacs, вы можете эффективно генерировать исходный код из имен полей. Если бы вы были искусны в этом, вы могли бы сделать это за меньшее время, чем требуется, чтобы написать и протестировать отражающую версию.
Что такое A, B, C? Перечни? – assylias
@assylias 'A.A_NAME' и т. Д. являются конечным статическим полем в 'A', .. classes – texasbruce
Включает ли foo только эти статические поля? –