泛型是 Java 中一个强大的特性,它允许我们在编写代码时使用类型参数,而不是具体的类型。使得我们可以编写更灵活、可复用的代码,避免重复代码。
简单来说,泛型就是一种参数化类型,使得代码可以适用于多种数据类型,而无需为每种数据类型都编写一遍代码。
泛型的优点:
- 类型安全: 编译器可以在编译期检查类型错误,避免运行时类型转换异常(ClassCastException)。
- 代码重用: 通过泛型,可以编写更加通用的代码,减少重复代码。
- 提高可读性: 泛型使得代码更加清晰易懂。
泛型的使用场景:
- 集合框架: Java的集合框架(如List、Set、Map)广泛使用了泛型,使得集合中的元素类型更加明确。
- 自定义类和接口: 可以定义自己的泛型类和接口,以满足特定的需求。
- 方法: 可以定义泛型方法,使方法能够处理不同类型的参数。
自定义泛型类
如何定义泛型类?
在类名后面用尖括号<>
括起来,尖括号内就是类型参数。
public class GenericClass<T> {
private T data;
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
}
泛型类的使用:
GenericClass<Integer> integerGeneric = new GenericClass<>();
integerGeneric.setData(100);
GenericClass<String> stringGeneric = new GenericClass<>();
stringGeneric.setData("Hello");
自定义泛型方法
如何定义泛型方法?
在返回值类型之前使用尖括号<>
括起来,尖括号内就是类型参数。
public class GenericClass {
public static <E> void printArray(E[] inputArray) {
for (E element : inputArray) {
System.out.println(element);
}
}
}
泛型方法的使用:
Integer[] intArray = { 10, 20, 30 };
String[] strArray = { "Hello", "World" };
GenericClass.printArray(intArray);
GenericClass.printArray(strArray);
泛型通配符
什么是泛型通配符?
泛型通配符使用?
表示,可以用来表示任意类型。
- 无限定通配符:
<?>
表示任意类型。 - 上界限定通配符:
<? extends T>
表示T类型或其子类。 - 下界限定通配符:
<? super T>
表示T类型或其父类。
泛型通配符的使用:
List<?> list1; // 任意类型
List<? extends Number> list2; // Number或其子类
List<? super Integer> list3; // Integer或其父类
要点总结:
- 泛型使用尖括号
<>
来定义类型参数。 - 泛型可以应用于类、接口和方法。
- 泛型通配符
?
可以表示任意类型。