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

时间:2014-03-11 09:54:22

标签: 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引用中。返回类型的情况也是如此。
  3. 我不会在Java bug repo中为此提出错误,正如Javadoc已经指出的那样,这些情况是已知的。

    任何指针?

1 个答案:

答案 0 :(得分:5)

null检查将检查null,如果为null则抛出NullPointerException。但是,对e.hasMoreElements()的调用是多余的,如果e为空,则会产生相同的效果。

设计者选择特定于该方法返回的List类型。他希望明确将枚举的副本放入新的ArrayList中并返回ArrayList。这可以防止Java的未来版本返回另一个List实现,但这种情况不太可能发生,并且它向调用者提供了更多信息,调用者可以依赖此列表作为ArrayList。没有什么根本不对的。