有没有一种方法可以对通用类型的 Collection 进行操作?

Is there a way of operating on a generic type of Collection?

我有一个方法可以处理某种形式的集合。但是,是否可以将集合类型的数量扩展到 运行 上的方法? 我不是指像 ArrayList 这样的通用集合,而是该方法适用于 ArrayList、Arrays、Collections、Sets、Hashtables?

虽然您不能直接扩展该方法以支持您提到的其他类型,但从 API 的角度来看,您可以通过重载方法来实现这一点。例如,如果您实现一个方法来处理所有集合:

public <T> void processData(Collection<T> data) { ... }

这适用于所有实现 Collection 的类型。您可以为每个不是 Collection 的类型重载此方法。例如:

public <T> void processData(T[] data) {
    processData(Arrays.asList(data));
}

在此示例中,您也将重新使用处理数组 Collection 结构的相同方法。每个不实现 Collection 或数组的类型都需要另一个专门的重载方法,将其转换为 Collection,或者更可能的是,以对其有意义的方式处理该数据结构.

最后通过重载方法,可以调用同名方法,传入多种类型。因此,从 API 的角度来看,您似乎总是在调用相同的方法:

Collection<String> coll = new ArrayList<String>();
int[] arrayOfInts = new int[10];

// You can call processData on both of these types now
processData(coll);
processData(arrayOfInts);