如何实例化通用类的array
对象?
我在Java
中实现了哈希表。
要实例化的通用类:
class GenericLinkedList<T> {
// Generic Class Codes Here
}
哈希表类:
public class HashTable {
private GenericLinkedList[] table; // Generic Class Instantiation
private static final int SIZE = 50;
public HashTable() {
this.table = new GenericLinkedList[SIZE];
for(int i = 0; i < SIZE; i++)
this.table[i] = new GenericLinkedList();
}
}
答案 0 :(得分:2)
您无法创建泛型类型的数组。以下代码无效:
List<String>[] listArray = new List<String>[10]; // Error
最好在内部使用Object[]
来存储元素,让返回元素的方法做适当的强制转换:
public class HashTable<T> {
private Object[] table;
private static final int SIZE = 50;
public HashTable(){
this.table = new Object[SIZE];
for(int i = 0; i < SIZE; i++)
this.table[i] = new GenericLinkedList();
}
}
仅供参考,这就是java.util.ArrayList
的实施方式。
P.S。:为什么你的Hashtable
似乎没有键值映射的东西?这更像是一个清单。
答案 1 :(得分:0)
首先,您发布的代码没有任何问题。您可能希望table
为GenericLinkedList<T>[]
。解决方案很简单,在创建阵列时,请使用new GenericLinkedList[SIZE]
或new GenericLinkedList<?>[SIZE]
。
public class HashTable<T> {
private GenericLinkedList<T>[] table;
private static final int SIZE = 50;
public HashTable(){
this.table = new GenericLinkedList[SIZE];
for(int i = 0; i < SIZE; i++)
this.table[i] = new GenericLinkedList();
}
}
或
public class HashTable<T> {
private GenericLinkedList<T>[] table;
private static final int SIZE = 50;
public HashTable(){
this.table = (GenericLinkedList<T>[])new GenericLinkedList<?>[SIZE];
for(int i = 0; i < SIZE; i++)
this.table[i] = new GenericLinkedList();
}
}
答案 2 :(得分:-1)
为什么不是你的HashTable通用本身? HashTable<T>
很好地解决了你的问题:
this.table = new GenericLinkedList<T>[SIZE];
您也可以使用GenericLinkedList<?>
。