在处理我的代码时,我使用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写得不干净(我认为)。
null
检查,这是标准API应该始终考虑的事情。ArrayList
存储在ArrayList
的引用中,该引用通常存储在List
引用中。返回类型的情况也是如此。我不会在Java bug repo中为此提出错误,正如Javadoc已经指出的那样,这些情况是已知的。
任何指针?
答案 0 :(得分:5)
null检查将检查null,如果为null则抛出NullPointerException。但是,对e.hasMoreElements()
的调用是多余的,如果e
为空,则会产生相同的效果。
设计者选择特定于该方法返回的List类型。他希望明确将枚举的副本放入新的ArrayList中并返回ArrayList。这可以防止Java的未来版本返回另一个List实现,但这种情况不太可能发生,并且它向调用者提供了更多信息,调用者可以依赖此列表作为ArrayList。没有什么根本不对的。