java - Collections 类中的方法没有对输入集合进行空检查

标签 java collections

<分区>

在处理我的代码时,我使用了 Collections 并遇到了一些对我来说似乎很奇怪的东西。我想知道为什么以前从未问过这个问题,尽管我提到的这个类和方法从 Java 1.4 就存在

/**
 * Returns an array list containing the elements returned by the
 * specified enumeration in the order they are returned by the
 * enumeration.  This method provides interoperability between
 * legacy APIs that return enumerations and new APIs that require
 * collections.
 *
 * @param e enumeration providing elements for the returned
 *          array list
 * @return an array list containing the elements returned
 *         by the specified enumeration.
 * @since 1.4
 * @see Enumeration
 * @see ArrayList
 */
public static <T> ArrayList<T> list(Enumeration<T> e) {
    ArrayList<T> l = new ArrayList<>();
    while (e.hasMoreElements())
        l.add(e.nextElement());
    return l;
}

这是我正在经历的方法。我真的很想知道为什么 API 写得不干净(我认为)。

  1. 没有对输入集合进行 null 检查,这是标准 API 应该始终考虑的事情。
  2. 创建的ArrayList 存储在ArrayList 的引用中,通常存储在List 引用中。返回类型也是如此。

我没有在 Java 错误库中为此提出错误,正如 Javadoc 已经指出的那样,这些情况是已知的。

有什么建议吗?

最佳答案

null 检查将检查 null,如果为 null,则抛出 NullPointerException。但这对于调用 e.hasMoreElements() 是多余的,如果 e 为 null,它具有相同的效果。

设计者选择具体说明该方法返回的列表类型。他想明确表示将枚举的副本制作成一个新的 ArrayList 并返回一个 ArrayList。这会阻止 Java 的 future 版本返回另一个 List 实现,但这种情况不太可能发生,并且它会向调用者提供更多信息,调用者可以依赖此列表作为 ArrayList。这从根本上没有错。

关于java - Collections 类中的方法没有对输入集合进行空检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22322128/

相关文章:

python - 计算列表中相似的列表元素

java - 如何获取Firebase用户数据

java - 如何将结果集映射到对象的嵌套结构?

java - 通过一个比较器插入树形图并根据java中的另一个比较器获取条目

Javac 无法在 cmd windows 10 中工作

WPF 控件设计指南 - 时间线

java - 将 java.util.Calendar 日期与 java.util.Date 进行比较

c# - 按创建顺序对哈希表进行排序

java - Collection.contains() -> 获取项目

java - 我们可以根据 Map 中的键和值对 Set 进行排序吗?