這裏有幾個問題。首先,內部類(HashNode
)對其聲明類的實例(HashArray
)具有隱式引用。因此,它處於其聲明類的類型參數的範圍內。你不應該重新聲明的類型參數K
和V
爲HashNode
,因爲這是隱藏在外層標記:
class HashArray<K, V> {
class HashNode {
//K and V still have meaning in here
}
...
}
要麼,讓HashNode
一個靜態嵌套類來簡化事情自己:
class HashArray<K, V> {
static class HashNode<K, V> {
//no implicit reference to an outer HashArray
}
...
}
進入數組創建:無法創建具體參數化類型的數組。請參閱Angelika Langer的泛型教程explanation on why。簡而言之,仿製藥和陣列就像油和水,你應該只使用收集品。
最好的解決辦法就是改用List<HashNode>
。你已經開始用一個反正:
List<HashNode> nodeList = new ArrayList<HashNode>(size);
或者,如果你讓HashNode
靜態類:
List<HashNode<K, V>> nodeList = new ArrayList<HashNode<K, V>>(size);
注意,在Java 7中,在RHS可以只是在這兩種情況下new ArrayList<>(size)
。
我的回答的完整性而已,如果你真的堅持要保持數組,你需要使用一個未經檢查的轉換:
@SuppressWarnings("unchecked")
HashNode[] array = (HashNode[])new HashArray<?, ?>.HashNode[size];
或者,如果HashNode
作出靜態:
@SuppressWarnings("unchecked")
HashNode<K, V>[] array = (HashNode<K, V>[])new HashNode<?, ?>[size];
但是,這將是固有的不安全和不應該完成。
'HashNode [] array;'未初始化。您將'array'作爲固定行中的參數。如果你將'null'傳遞給'toArray()',它會拋出NPE。 – jlordo
有沒有辦法初始化它?鑑於你不能創建對象? – user2007447
'HashNode []數組=新HashNode [0];' – jlordo