返回null,而不是实际的数组或集合,强制要求方法的调用者判断null,这让代码更复杂,不易读。 而且,很多时候,null就是用来表示空。

如下代码:

public static Result[] getResults() {
  return null;                             // Non-Compliant
}

public static void main(String[] args) {
  Result[] results = getResults();

  if (results != null) {                   // Nullity test required to prevent NPE
    for (Result result: results) {
      /* ... */
    }
  }
}

应该重构为:

public static Result[] getResults() {
  return new Result[0];                    // Compliant
}

public static void main(String[] args) {
  for (Result result: getResults()) {
    /* ... */
  }
}

这个规则也可以应用于集合:

public static List<Result> getResults() {
  return null;                             // Non-Compliant
}

应该重构为:

public static List<Result> getResults() {
  return Collections.EMPTY_LIST;           // Compliant
}