有没有一种方法可以对通用类型的 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);
我有一个方法可以处理某种形式的集合。但是,是否可以将集合类型的数量扩展到 运行 上的方法? 我不是指像 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);