Указание двух строковых литералов подразумевает отсутствие накладных расходов во время выполнения. Вы можете добиться того же, используя конкатенацию строк, когда все аргументы являются константами времени компиляции. Напротив, использование StringBuilder
всегда подразумевает операцию времени выполнения. Вы можете прочитать больше о «StringBuilder
лучше, чем +
миф» в этом ответе .
Как правило, вы можете уменьшить сложность syntacti c вашего кода:
private Optional<String> validatePrimaryPath(
SalesChannelType salesChannelCode, List<String> primaryPathList) {
final String prefix = "Customer Hierarchy is mandatory field";
final String general = prefix + ".", forHebToYou = prefix + " for HebToYou.";
return Optional.of(
salesChannelCode.equals(SalesChannelType.HEB_TO_YOU)? forHebToYou: general)
.filter(s -> CollectionUtils.isEmpty(primaryPathList));
}
Это подчеркивает, что вы делаете то же самое, только с немного другими данными и используете semanti c из Optional
вместо оператора if
. И реальный код не нуждается в изменениях, если вы решите экстернализировать фактические строки.
Обратите внимание, что если SalesChannelType
является enum
, в equals
нет необходимости, вы можете просто использовать salesChannelCode == SalesChannelType.HEB_TO_YOU
тогда.