报告可以替换为单一 String.repeat() 方法的循环 (自 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 的新功能