Java中宣告陣列必須要用
Classname arrayName[] = new Classname[n];
這樣來宣告,好,問題來了,泛型不支援
GenericName<Classname>arrayName[] = new GenericName<Classname>[n];
這種方式,會產生錯誤,於是乎最簡單的方式就是搞成Object陣列,
例如
Object arrayName[] = {new GenericName<Classname>, new GenericName<Classname, ...> } ;
這樣編譯就能過了,看似完美,可是,實際上用的時候,每次都必須要轉型,而且用到轉型的Function每一個都必須要@SuppressWarnings("unchecked")在前面,不然就會警告,真討厭,另外因為用的是Object,也無法檢查型別是否正確,只能算是折衷的方案,那麼要怎麼宣告該死的泛型陣列呢? 如下 :
@SuppressWarnings("unchecked")
GenericName<Classname>arrayName[] = new GenericName[n];
for(int i=0;i<arrayName.length;i++) {
arrayName[i] = new GenericName<Classname>();
}
這樣就可以得到正確的泛型陣列,然後只需要一次@SuppressWarnings("unchecked")就可以得到想要的結果,後面也可以按照正常的方式使用,也就是利用隱含轉換,將泛型類別陣列建立完成,後面再建立正確的泛型陣列元素,雖不完美,但是是可以勉強接受的方案。
去你的型別轉換!
星期五, 10月 21, 2011
訂閱:
文章 (Atom)