具有多个泛型的Java通用数组声明?

时间:2015-10-26 02:51:06

标签: java generics

我正在尝试在这样的

中创建一个通用类
public class Cache <K,V> {

  private Entry<K,V>[][] cache;

  public Cache(int setCount, int arity){

      this.cache = new Entry<K,V>[setCount][arity];
}

现在java告诉我我不能声明一个通用数组?我知道在C中我可以把它放在记忆中。有谁知道在java中应该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以直接使用,

this.cache = new Entry[setCount][arity];

这将生成类似于

的警告
  

类型安全:Entry [] []类型的表达式需要未经检查的转换以符合Entry [] []

但你必须忍受它,或者你可以用@SuppressWarnings("unchecked")来压制它。

请注意,由于cache的类型为Entry<K,V>[][],因此泛型行为仍然适用于此。

答案 1 :(得分:1)

  

有谁知道如何在java中完成这项工作?

使用ArrayList(在ArrayList内)代替......

private List<List<Entry<K,V>> cache;

然后你可以使用类似......

之类的东西来初始化它
this.cache = new ArrayList<>(setCount);

现在,如果您想要预先添加孩子List,则由您自己决定。您可以延迟创建它,或使用构造函数创建它,例如......

for (int index = 0; index < setCount; index++) {
    cache.add(new ArrayList<>(arity));
}

取决于您的需求

请查看Collections Trail了解详情