我有一个返回 ArrayList 的 ArrayList 的类。我想返回一个集合的集合来抽象输出数据类型。
使用标准的 ArrayList,很简单 - 只需将返回类型定义为 Collection 即可。不幸的是,对于 2D ArrayList,这是行不通的:
//This does not compile
public Collection<Collection<Object> myFunction() {
return new ArrayList<ArrayList<Object>>();
}
//This does compile (but isn't what I want)
public Collection<ArrayList<Object> myFunction() {
return new ArrayList<ArrayList<Object>>();
}
显然可以创建一个 Collection,然后单独添加 ArrayList,将它们转换为 Collection,但这比我想象的要复杂。抽象多维返回类型的正确方法是什么?
您可以使用
Collection<Collection<Object>>
,而不是使用 Collection<? extends Collection<Object>>
作为返回类型。此语法断言您将返回实现 Collection
接口的某个 Collection
,它允许您调用 Collection
接口指定的任何方法,而无需假设任何更具体的内容。
public Collection<? extends Collection<Object>> myFunction() {
return new ArrayList<ArrayList<Object>>();
}