2015-10-26 156 views
0

我想在java中创建一个通用类这样带有多个泛型的Java泛型数组声明?

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中完成?

回答

3

您可以直接只使用,

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

,这将产生一个警告类似,

类型安全:条目类型[] []选中需要转换的表现符合进入[] []

但是你不得不忍受它,或者你可以用@SuppressWarnings("unchecked")压制它。

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

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更多细节

+0

非常感谢您的回答,我回答了下面的答案,因为我关心访问时间。这个担心是否合适? – dakillakan

+1

好'ArrayList'是'List'的一个实现,它在内部由一个'array'支持,所以,不,访问时间几乎相同(允许一个额外的方法调用),它也是动态调整大小的,所以你可以增长或缩小它,如果你愿意,你不需要额外的代码。几乎任何地方,你可以使用一个数组,你可以使用一个'ArrayList'代替 – MadProgrammer

+1

有没有人关心解释为什么会收到downvote?这是一个解决问题的可行解决方案。这是使用普通数组的可行解决方案 – MadProgrammer