通用數組的問題(即它們的不可能性)似乎是我反覆出現的主題。以下是HashMap數據結構的相關代碼。顯然,我不能聲明Bucket[]
,因爲泛型數組是不可能的。不過,我可以申報MapThing.Bucket[]
。當我斷言這是一種好的做法時,我是否正確,因爲儘管MapThing.Bucket[]
是原始類型聲明,但實際的MapThing.Bucket[]
實例是通過其封閉實例進行類型參數化的嗎?這個通用數組是合法的嗎?
感謝您的任何見解!
克里斯
public class MapThing<K, V> {
private Bucket buckets[];
public static void main(String[] argv) {
MapThing<String, Integer> thing = new MapThing<>();
thing.put("got your number", 8675309);
}
@SuppressWarnings("unchecked")
public MapThing() {
buckets = new MapThing.Bucket[314159];
}
public void put(K key, V value) {
Bucket bucket = new Bucket(key, value);
// Prints typeof bucket key: String, value: Integer
System.out.println("typeof bucket key: "
+ bucket.getKey().getClass().getSimpleName() + ", value: "
+ bucket.getValue().getClass().getSimpleName());
buckets[Math.abs(key.hashCode() % buckets.length)] = bucket;
}
private class Bucket {
private K key;
private V value;
Bucket(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public V getValue() {
return value;
}
}
}
你當然可以聲明一個'Bucket'數組,你爲什麼認爲你不能?你正在使用原始類型,你不應該那樣做。 –
實際數組知道關於泛型的_nothing_。 –
不,我不能聲明一個Bucket數組: Bucket [] bucket = new Bucket [12]; //給出以下錯誤: 「無法創建MapThing的通用數組 .Bucket」 –
orb