我有一种方法可以处理某种形式的集合。但是,是否可以扩展集合类型的数量以运行该方法? 我不是指像ArrayList这样的泛型集合,但是该方法可以在ArrayLists,Arrays,Collections,Sets,Hashtables上使用吗?
答案 0 :(得分:2)
虽然您无法直接扩展该方法以支持您提到的其他类型,但您可以通过重载方法从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);