在Java中,泛型(Generics)是一種編程語(yǔ)言特性,允許你在類(lèi)、接口和方法上定義類(lèi)型參數(shù)。泛型的主要目標(biāo)是提高Java語(yǔ)言的類(lèi)型安全和消除頻繁的類(lèi)型轉(zhuǎn)換。通過(guò)使用泛型,程序員可以在編譯時(shí)捕獲更多的錯(cuò)誤,而不是等到運(yùn)行時(shí)。
以下是Java中泛型的基本用法:
public class Box<T> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
這里,Box
是一個(gè)泛型類(lèi),T
是一個(gè)類(lèi)型參數(shù)。你可以為 T
傳遞任何類(lèi)型,例如 Integer
、String
等。
Box<Integer> integerBox = new Box<>();
integerBox.setItem(42);
System.out.println(integerBox.getItem()); // 輸出 42
Box<String> stringBox = new Box<>();
stringBox.setItem("Hello, world!");
System.out.println(stringBox.getItem()); // 輸出 Hello, world!
public static <T> T getFirstElement(List<T> list) {
if (list == null || list.isEmpty()) {
return null;
}
return list.get(0);
}
這里,getFirstElement
是一個(gè)泛型方法,它接受一個(gè) List<T>
類(lèi)型的參數(shù),并返回一個(gè) T
類(lèi)型的值。
List<Integer> integers = Arrays.asList(1, 2, 3);
Integer firstInteger = getFirstElement(integers);
System.out.println(firstInteger); // 輸出 1
List<String> strings = Arrays.asList("a", "b", "c");
String firstString = getFirstElement(strings);
System.out.println(firstString); // 輸出 a
通配符 ?
可以用于表示未知類(lèi)型。這在處理泛型類(lèi)型的集合時(shí)非常有用。例如,你可以創(chuàng)建一個(gè) List<?>
來(lái)表示包含任意類(lèi)型對(duì)象的列表。
List<Integer> integerList = Arrays.asList(1, 2, 3);
List<String> stringList = Arrays.asList("a", "b", "c");
printList(integerList);
printList(stringList);
public static void printList(List<?> list) {
for (Object elem : list) {
System.out.println(elem + " ");
}
System.out.println();
}
這里,printList
方法接受一個(gè) List<?>
類(lèi)型的參數(shù),它可以接受任何類(lèi)型的列表。注意,由于通配符表示未知類(lèi)型,因此你不能將元素添加到這樣的列表中(除了 null
),因?yàn)槟銦o(wú)法確定哪些類(lèi)型是允許的。
有時(shí),你可能希望限制泛型類(lèi)型參數(shù)的范圍。例如,你可能只想允許 Number
類(lèi)及其子類(lèi)作為類(lèi)型參數(shù)。這可以通過(guò)使用有界泛型來(lái)實(shí)現(xiàn):
public class NumericBox<T extends Number> {
private T item;
public void setItem(T item) {
this.item = item;
}
public T getItem() {
return item;
}
}
這里,T extends Number
表示 T
必須是 Number
類(lèi)或其子類(lèi)的類(lèi)型。
這就是Java中泛型的基本用法。通過(guò)使用泛型,你可以編寫(xiě)更加靈活、可重用和類(lèi)型安全的代碼。