Java泛型错误

Java Generics Error

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Java how to: Generic Array creation
Error: Generic Array Creation

我得到这个错误:

1
Cannot create a generic array of T

这是我的代码(第6行出错):

1
2
3
4
5
6
7
8
1    public class HashTable<T> {
2    
3        private T[] array;
4    
5        HashTable(int initSize) {
6            this.array = new T[initSize];
7        }
8    }

我想知道为什么会出现这个错误,以及修复它的最佳解决方案。谢谢。

更新:

我调整了我的代码,使数组接受链表,但我得到了一个新的错误。

这是我的错误:

1
Cannot create a generic array of LinkedList<T>

这是我的代码(第六行出错):

1
2
3
4
5
6
7
8
1    public class HashTable<T> {
2    
3        private LinkedList<T>[] array;
4    
5        HashTable(int initSize) {
6            this.array = new LinkedList<T>[initSize];
7        }
8    }

这个错误是因为完全相同的原因吗?我只是假设我可以创建通用的链接列表并将它们存储在数组中。


是的,无法创建泛型数组。我所知道的最佳解决方法是使用集合:

1
2
3
4
5
private List<T> list;

.......

list = new ArrayList<T>();


可以通过反射创建泛型数组(尽管需要不安全的强制转换),但只需将类作为参数传递(假定以下方法位于定义类型参数的类中):

1
2
3
4
@SuppressWarnings("unchecked")
public T[] createArray(Class<T> klass, int size) {
    return (T[]) Array.newInstance(klass, size);
}

例如,在您的案例中:

1
2
3
4
5
6
7
HashTable<Integer> t = new HashTable<Integer>();
Integer[] intArray = t.createArray(Integer.class, 4);
intArray[0] = 1; intArray[1] = 2;
intArray[2] = 3; intArray[3] = 4;

System.out.println(Arrays.toString(intArray));
> [1, 2, 3, 4]


你不能创建一个T(在Java中),但是t[]内部是一样的对象[]。

1
2
3
4
5
6
7
8
9
public class HashTable<T> {

    private T[] array;

    @SuppressWarnings("unchecked")
    HashTable(int initSize) {
        this.array = (T[]) new Object[initSize];
    }
}

(将编译,我检查过)

由于newacct的注释,只使用对象[]并将项强制转换为t可能会更好。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class HashTable<T> {

    private Object[] array;

    public HashTable(int initSize) {
        this.array = new Object[initSize];
    }

    public void put(String pKey, T pItem) {
       ...
       array[x] = pItem;
       ....
    }
    public T get(String pKey) {
       ...
       return (T) array[x];
    }
}