Java 泛型(Generics)是一种使得 Java 语言能够对多种数据类型进行操作的机制,而无需编写单独的类型特定代码。泛型通过在类、接口和方法中使用类型参数来实现这一点。
以下是泛型的一些关键点:
1.泛型类
创建对象的时候确定具体类型
2.泛型方法
非静态: 泛型是根据类的泛型去匹配的
静态: 需要声明出自己独立的泛型
3.泛型接口 :
类实现接口的时候,直接确定类型
延续接口的泛型,等创建对象的时候再确定
4.泛型限定 :
? (任意类型)
? extends E (只能接收 E 或者是 E 的子类)
? super E (只能接收 E 或者是 E 的父类)
1. 定义泛型类和接口:
- 你可以定义一个带有类型参数的类或接口,例如:
public class Box<T> { private T t; public void set(T t) { this.t = t; } public T get() { return t; } } // 使用 Box<Integer> integerBox = new Box<>(); integerBox.set(10); Integer someInteger = integerBox.get();
2. 泛型方法:
- 泛型不仅可以用于类和接口,还可以用于方法。例如:
public <T> void printArray(T[] inputArray) { for (T element : inputArray) { System.out.printf("%s ", element); } System.out.println(); }
3. 通配符(Wildcard):
- 使用通配符可以使泛型更加灵活。例如:
?
表示未知类型,可以是任何类型。 -
public void printList(List<?> list) { for (Object element : list) { System.out.println(element); } }
4. 受限类型参数:
- ? (任意类型)
- ? extends E (只能接收 E 或者是 E 的子类)
- ? super E (只能接收 E 或者是 E 的父类)
- 可以对类型参数进行限制,例如:
public <T extends Number> void processNumbers(List<T> list) { for (T number : list) { System.out.println(number.doubleValue()); } }