初始化类型Generic的Java通用数组

时间:2009-06-22 07:11:54

标签: java generics hash

所以我有这个我正在开发的通用HashTable类,我想将它一般用于任意数量的传入类型,我还想将内部存储数组初始化为LinkedList的数组(用于冲突目的) ),其中每个LinkedList被提前指定(对于类型安全性)是HashTable类的泛型类型。我怎么能做到这一点?以下代码最能说明我的意图,但当然不能编译。

public class HashTable<K, V>
{
    private LinkedList<V>[] m_storage;

    public HashTable(int initialSize)
    {
        m_storage = new LinkedList<V>[initialSize];
    }
}

2 个答案:

答案 0 :(得分:15)

Java中的泛型不允许创建具有泛型类型的数组。您可以将数组转换为泛型类型,但这会生成未经检查的转换警告:

public class HashTable<K, V>
{
    private LinkedList<V>[] m_storage;

    public HashTable(int initialSize)
    {
        m_storage = (LinkedList<V>[]) new LinkedList[initialSize];
    }
}

Here是一个很好的解释,没有深入了解为什么不允许创建通用数组的技术细节。

答案 1 :(得分:0)

此外,您可以使用注释逐个方法地抑制警告:

@SuppressWarnings("unchecked")
public HashTable(int initialSize) {
    ...
    }