Java程式設計中泛型是很多人都接觸到的問題,但是陣列是不能通過泛型建立的,因為我們不能建立不可具體化的型別的陣列。何為不可集體化?即不是一個實際存在的型別,因而不能例項化。今天就和大家分享下怎樣建立泛型陣列。
工具/原料
Java
Windows、linux
方法/步驟
首先看這個泛型:
public class TestGenericArray
在new E[DEFAULT_INITIAL_CAPACITY];這一行會有編譯錯誤,告訴你不能建立泛型陣列。具體見下圖。
那我們要怎麼做呢?有兩種辦法解決上面的錯誤,第一種是通過建立一個Object型別的陣列,然後顯示轉換為E[]型別。見下面的程式碼:
import java.util.EmptyStackException;public class TestGenericArray
另外一種能夠消除建立泛型陣列錯誤的是宣告陣列域時,直接宣告為Object型別的陣列,當獲取陣列元素時把對應的元素轉換為E泛型型別。
public class TestGenericArray
第二種方法的重點在陣列宣告和獲取元素上面。但是這種做法會有警告,見下圖。同上面的方法一樣,同樣提示的是未受檢的型別轉換問題。可以通過@SuppressWarning註解取消警告,但是要在儘可能小的範圍禁止,否則編譯器能做的正常檢測也會被禁止,通常不要在類上加該註解。加註解後的程式碼見圖2.
綜合兩種方法,其實本質上都沒有建立泛型陣列,java也不允許這樣做。只是通過建立Object陣列然後轉化為泛型型別而已。方法一是一次性轉換整個陣列,而方法二是每次取陣列元素時才進行轉換,實際上都是相同的處理。