2015-05-01 40 views
0

我看到StackOverflow中的所有過去的問題,我沒有找到我的問題的適當答案。 我要創建一流的協會名單的陣列,但在運行後,我有這樣的線路中有一個例外:類協會列表數組<K,V>通用

private static final int SIZE=99999; 
private List<Association <K,V>> [] hashtab; 
hashtab = (List<Association <K,V>>[]) new Object [SIZE]; 

異常在線程「主要」 java.lang.ClassCastException:[Ljava .lang.Object;不能轉換爲[Ljava.util.List; (TableHachage.java:20)at com.test.TestHash.main(TestHash.java:11)​​

我該如何解決這個問題?

注:這是一個學術上的問題,所以我們不能直接使用哈希表,我們必須通過鏈接使用衝突解決,並使用鏈表爲

+0

你不似乎沒有理解如何在Java中工作。你不能只用一個強制轉換來改變對象的類型。你爲什麼不製作你真正想要的東西('新的ArrayList <協會>()[SIZE]')而不是創建一個'Object []'並試圖施展它? – azurefrog

+0

有關更詳細的解釋,請參閱http://stackoverflow.com/questions/5289393/casting-variables-in-java。 – azurefrog

+0

請@azurefrog,我試過之前發佈我的問題,新的ArrayList >()[SIZE]不工作,有未解決的編譯問題:表達式的類型必須是數組類型,但它解析爲ArrayList > –

回答

0

爲什麼不乾脆:hashtab = (List<Association<K,V>>[]) new ArrayList[SIZE];

實際上你不瞭解OOP的基本原理:Object類的對象不能被轉換到任何其他類,因爲Object對所有其他類都是超類。

+0

但有DownCast,所以我們可以這樣做:(T [] myStack =(T [])new Object [SIZE];) –

+0

感謝@Andremoniy爲您的答案。 –

0

不知道你爲什麼試圖做鑄造?那是你的問題。

嘗試只做一個新的數組列表: List listOfAssociations = new ArrayList();

讓我知道你想用「hashTable」來做什麼。因爲你可以使用HashMap或其他某些對象

(我與你想什麼來實現那種迷茫)

0

二者必選其一

hashtab = new ArrayList[SIZE]; 

hashtab = (List<Association <K,V>>[])new ArrayList<?>[SIZE];