为什么在java.util.Collections中声明了静态java.util.Collections.fill()方法而不是java.util.AbstractList中的实例方法?

时间:2015-09-23 14:53:29

标签: java collections

java.util.Collections中,有一种方法:

public static <T> void fill(List<? super T> list, T obj)

使用第二个参数指定的对象填充第一个参数指定的List。要调用此方法,可以编写一次,例如:

java.util.List<String> l;
//...
java.util.Collections.fill(l, "Hello");

为什么此方法未在java.util.AbstractList中声明为实例方法?如果是,它可以作为实例方法,并且将它称为更方便:

java.util.List<String> l;
//...
l.fill("Hello");

3 个答案:

答案 0 :(得分:4)

因为存在实现接口AbstractList的其他类而不是List。 Java库中的一个示例是CopyOnWriteArrayList,任何人都可以自己实现。因此,通过接受List,该方法更有用,因为它可以与任何这些类一起使用。

答案 1 :(得分:2)

还有其他列表java.util.AbstractList。您甚至可以创建自己的全新List实现。

java.util.Collections.fill();将适用于所有实施,而不仅仅是AbstactList s。

答案 2 :(得分:1)

我认为可以使用java.util.List接口的任何实现,而不仅仅是java.util.AbstractList个孩子。 假设我有我的List实现,而不是从AbstractList派生,你的设计我必须自己实现这个方法。