此代碼正常工作並打印出數字120.但是,如果我取消註釋主函數中的行。java數組泛型初始化
代碼拋出異常:線程「main」中的異常java.lang.ClassCastException:[Ljava.lang.Comparable;不能投射到[Ljava.lang.Double; at General.main
我搜索了一下,發現了關於java中泛型數組的幾個討論。人們承認在java中泛型數組的處理不是很好。但是我仍然對這段代碼感覺很糟糕:在不同的地方打印出一行會產生不同的結果,(正確執行與拋出異常)。
有人可以請評論這段代碼,並建議是否有任何簡單的修復與主函數中的println代碼相關的異常?
這裏是我的代碼:
public class General<Key extends Comparable<Key>> {
public Key[] keys;
@SuppressWarnings("unchecked")
public General(int NMAX) {
keys = (Key[]) new Comparable[NMAX];
System.out.println(keys.length);
}
public static void main(String[] args){
General<Double> g = new General<Double>(120);
// System.out.println(g.keys.length);
}
}
System.out.println(g.keys.length);
是否有某些原因,您不能使用List而不是Array?也就是說,就像'私人列表 keys = new ArrayList ();' - 那麼你可以讓類'General ' –
@ Elliott的調查是非常合理的。簡短的答案是示例代碼片段不是非常安全的。列表將爲您處理這個問題。 – Radiodef
ArrayList肯定會解決這個問題,但我正在尋找更深入的理解爲什麼我的方法失敗,正如下面的人所解釋的。 – Chao