报告可被替换为单一 StringBuilder.repeat() 方法(自 Java 21 起提供)或 String.repeat() 方法(自 Java 11 起提供)的循环。

示例 (Java 11):


  void append(StringBuilder sb, int count, Object obj) {
    for (int i = 0; i < count; i++) {
      sb.append(obj);
    }
  }

在应用快速修复后:


  void append(StringBuilder sb, int count, Object obj) {
    sb.append(String.valueOf(obj).repeat(Math.max(0, count)));
  }

默认情况下,如果不能静态地证明 count 非负,则该检查可以使用 Math.max(0, count) 来包装 count。 这样做的目的是防止可能发生的语义更改,因为 String.repeat() 拒绝负数。 必要时,可使用添加 Math.max(0, count) 以避免可能的语义更改选项禁用此行为。

同样,如果不知道要重复的字符串能否为 null,可将其包装在 String.valueOf 中,以防止可能发生的 NullPointerException

仅当项目或模块的语言级别为 11 或更高时,此检查才会报告。

2019.1 最新变化