将多维ArrayList抽象为Collection的高效方法

问题描述 投票:0回答:1

我有一个返回 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,但这比我想象的要复杂。抽象多维返回类型的正确方法是什么?

java arraylist collections superclass abstraction
1个回答
0
投票

您可以使用

Collection<Collection<Object>>
,而不是使用
Collection<? extends Collection<Object>>
作为返回类型。此语法断言您将返回实现
Collection
接口的某个
Collection
,它允许您调用
Collection
接口指定的任何方法,而无需假设任何更具体的内容。

public Collection<? extends Collection<Object>> myFunction() {
    return new ArrayList<ArrayList<Object>>();
}
© www.soinside.com 2019 - 2024. All rights reserved.