例如交換陣列兩元素的需求,若使用JDK 1.5以後的版本,可以使用泛型語法設計為 T[] swap(T[] arrs, int i, int j) { T orgi = arrs[i]; arrs[i] = arrs[j]; arrs[j] = orgi; return arrs; },傳入陣列的元素型態都是T型態,但T實際上是型態變數(Type variables),用以取代實際的型態宣告,而泛型語法就是Java中實現參數多型的方式。
參數多型讓函式定義時更具涵蓋性,並具有靜態型別編譯時期安全檢查功能。例如可使用String[] result = swap(original, 1, 2)來呼叫swap函式,傳入物件是String[],傳回物件就會是String[],若使用其他型態宣告result,編譯器就會檢查出這個錯誤。
JDK 1.4前沒有泛型語法,相同需求必須使用次型態多型來達成,也就是定義函式為Object[] swap(Object[] arrs, int i, int j),如果實際上傳入物件是String[],呼叫後傳回物件必須進行轉型,例如String[] result = (String[]) swap(original, 1, 2),轉型語法只是要求編譯器停止該語句的型態檢查,真正的轉型是在執行時期進行,既然編譯時期使用轉型語法要求編譯器不要檢查型態,若執行時期轉型失敗,就得自行負責。
參數多型實際須依賴類型推斷(Type inference),如String[] result = swap(original, 1, 2)時,編譯器可由original推斷出T是String,從而得知傳回物件為String[]。有時為了規範型態變數範圍,可加上約束。例如取陣列中最大值的max函式,可定義為 T max(T[] arrs):
T max = arrs[0];
for(T elem : arrs) if(elem.compareTo(max) > 0) { max = elem; }
return max;