Java泛型是指編寫的代碼可以用於不同類型的對象,在編譯時被檢查的編程機制。Java泛型類在定義和使用上相對簡單,但仍然需注意一些技巧和規則。
一、泛型類的定義
泛型類可以定義在類名後面的尖括號里,用於限定類中的變量類型。對於泛型類,需要注意以下幾點:
1、泛型類的類型參數
泛型類的類型參數定義在類名後面的尖括號內。泛型類的類型參數可以有多個,它們之間用逗號分隔。類型參數可以在類中任意使用,作為類型變量使用,可以作為屬性類型、方法參數類型、方法返回類型等。
public class GenericsClass<T, U> { private T obj1; private U obj2; public GenericsClass(T obj1, U obj2) { this.obj1 = obj1; this.obj2 = obj2; } public T getObj1() { return obj1; } public U getObj2() { return obj2; } }
2、在實例化泛型類時指定類型參數
在實例化泛型類時需要指定類型參數,即使只有一個類型參數也要加上尖括號。當實例化泛型類時,所有的T類型都將被具體的類型替換。
GenericsClass<Integer, String> obj = new GenericsClass<Integer, String>(100, "Guru99");
二、使用泛型類
泛型類可以像普通類一樣使用。但是,由於可以指定不同的參數類型,因此可以更靈活地使用方法和屬性。以下是使用泛型類的示例:
public class Main { public static void main(String[] args) { GenericsClass<Integer, String> obj = new GenericsClass<Integer, String>(100, "Guru99"); System.out.println(obj.getObj1()); System.out.println(obj.getObj2()); } }
上面的代碼輸出結果為:
100
Guru99
三、泛型方法的定義和使用
泛型方法是指定義時帶有類型參數的方法。泛型方法和泛型類一樣,可以用於處理多種類型的數據。以下是使用泛型方法的示例:
1、定義泛型方法
泛型方法中的參數類型不是固定的,而是動態的。定義泛型方法時,需要在方法的返回類型前放置類型參數聲明。當調用泛型方法時,可以在方法名前指定類型參數或自動推斷類型參數。
public class GenericsMethod { public <T> void printArray(T[] inputArray) { for (T element : inputArray) { System.out.printf("%s ", element); } System.out.println(); } }
2、使用泛型方法
不像普通方法一樣,泛型方法需要在調用時指定類型參數,或可以被自動推斷。下面是使用泛型方法的示例:
public class Main { public static void main(String[] args) { Integer[] intArray = { 1, 2, 3, 4, 5 }; Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; GenericsMethod genericsMethod = new GenericsMethod(); System.out.println("Array integerArray contains:"); genericsMethod.printArray(intArray); System.out.println("\nArray doubleArray contains:"); genericsMethod.printArray(doubleArray); System.out.println("\nArray characterArray contains:"); genericsMethod.printArray(charArray); } }
上面的代碼輸出結果為:
Array integerArray contains:
1 2 3 4 5
Array doubleArray contains:
1.1 2.2 3.3 4.4
Array characterArray contains:
H E L L O
四、通配符
通配符(Wildcard)是一種類型參數,用於表示「任意類型」。可以在方法的參數中使用通配符,以增加參數的靈活性。可以使用「?」代替具體的類型,如「List」。
以下是使用通配符的示例:
public class GenericsWildcard { public static double sumList(List<? extends Number> list) { double sum = 0.0; for (Number i : list) { sum += i.doubleValue(); } return sum; } }
通過使用通配符,可以處理不同的類型,例如:
public class Main { public static void main(String[] args) { List<Integer> intList = Arrays.asList(1, 2, 3); List<Double> doubleList = Arrays.asList(1.2, 2.3, 3.4); System.out.println("The sum of the integer list is " + GenericsWildcard.sumList(intList)); System.out.println("The sum of the double list is " + GenericsWildcard.sumList(doubleList)); } }
上面的代碼輸出結果為:
The sum of the integer list is 6.0
The sum of the double list is 6.9
原創文章,作者:XPOO,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/148825.html