如何使用stringBuilder

问题描述 投票:0回答:3

我具有职能和技术负责人的审查代码,并说:为什么要这样的if语句?这基本上是相同的消息。如果要自定义,请使用具有该类型的字符串生成器。如何更改它,有人可以帮助我吗?

private Optional<String> validatePrimaryPath(SalesChannelType salesChannelCode, List<String> primaryPathList) {

  if (CollectionUtils.isEmpty(primaryPathList)) {
    if (salesChannelCode.equals(SalesChannelType.HEB_TO_YOU)) {
      return Optional.of("Customer Hierarchy is mandatory field for HebToYou.");
    } else {
      return Optional.of("Customer Hierarchy is mandatory field.");
    }
  }

  return Optional.empty();
}
java string optional stringbuilder stringbuffer
3个回答
0
投票

为了防止多次写入相同(部分)字符串文字,您可以:

  • 使用常量作为公共部分:

    if (CollectionUtils.isEmpty(primaryPathList)) {
        final String COMMON = "Customer Hierarchy is mandatory field";
        if (salesChannelCode.equals(SalesChannelType.HEB_TO_YOU)) {
            return Optional.of(COMMON + " for HebToYou.");
        } else {
            return Optional.of(COMMON + ".");
        }
    }
    
  • 使用StringBuilder构建字符串:

    if (CollectionUtils.isEmpty(primaryPathList)) {
        StringBuilder buf = new StringBuilder("Customer Hierarchy is mandatory field");
        if (salesChannelCode.equals(SalesChannelType.HEB_TO_YOU)) {
            buf.append(" for HebToYou");
        }
        return Optional.of(buf.append('.').toString());
    }
    

就我个人而言,我将代码保留在问题中,尤其是如果您可能需要支持非英语版本的文本,因为在其他语言中,多余的文本可能不会在那里。


1
投票

首先,不要使用原始类型。其次,我不同意使用StringBuilder构建消息是一种改进。但是,因为这就是您想要的,所以我将向您展示可能的意图。类似,

private Optional<String> validatePrimaryPath(SalesChannelType salesChannelCode, 
                List<String> primaryPathList) {
    if (CollectionUtils.isEmpty(primaryPathList)) {
        StringBuilder sb = new StringBuilder(
                    "Customer Hierarchy is mandatory field");
        if (salesChannelCode.equals(SalesChannelType.HEB_TO_YOU)) {
            sb.append(" for HebToYou");
        }
        sb.append(".");
        return Optional.of(sb.toString());
    }

    return Optional.empty();
}

[注意,我已经指定了该方法返回Optional<String>并在写入List<String>Optional时未指定类型而返回的是List,而您正在使用原始类型。


0
投票

个人,我认为您的代码还可以,但是如果您仍然想使用StringBuilder,对此我有个建议。

private Optional validatePrimaryPath(SalesChannelType salesChannelCode, List primaryPathList) {
    if (CollectionUtils.isEmpty(primaryPathList)) {
        StringBuilder sb = new StringBuilder("Customer Hierarchy is mandatory field.");
        if (salesChannelCode.equals(SalesChannelType.HEB_TO_YOU)) {
            sb.insert(sb.length()-1, " for HebToYou");
        }
        return Optional.of(sb.toString());
    }
    return Optional.empty();
}
© www.soinside.com 2019 - 2024. All rights reserved.