Java泛型
Java泛型
1. 泛型的基本概念
定义泛型类和泛型方法
泛型类:
public class Box<T> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}在上面的例子中,T 是类型参数,它将在实例化 Box 类时被具体化。\
泛型方法:
public class Util {
public static <T> void printArray(T[] inputArray) {
for (T element : inputArray) {
System.out.printf("%s ", element);
}
System.out.println();
}
}
在这里,<T> 表示该方法是泛型方法,T 可以是任何类型。
2. 使用泛型
泛型类的使用
Box<Integer> integerBox = new Box<>();
integerBox.set(10);
Integer someInteger = integerBox.get();
System.out.println(someInteger); // 输出:10泛型方法的使用
Integer[] intArray = {1, 2, 3, 4, 5};
Util.printArray(intArray); // 输出:1 2 3 4 5
String[] stringArray = {"Hello", "World"};
Util.printArray(stringArray); // 输出:Hello World3. 泛型的高级特性
限定通配符
上界通配符:使用 extends 关键字
public static void printNumbers(List<? extends Number> list) {
for (Number n : list) {
System.out.println(n);
}
}
下界通配符:使用 super 关键字
public static void addNumbers(List<? super Integer> list) {
list.add(10);
list.add(20);
}类型擦除
Java 的泛型是通过类型擦除来实现的,这意味着在编译时,泛型信息被移除,所有的泛型参数类型被替换为其边界或 Object(如果没有指定边界)。这保证了向后兼容性,但也带来了一些限制
public static void printList(List<Object> list) {
for (Object elem : list) {
System.out.println(elem);
}
}泛型和数组
由于类型擦除的存在,Java 不支持创建泛型数组:
// 不合法的语法
List<Integer>[] arrayOfLists = new List<Integer>[2];4. 常见问题
泛型类型参数的实例化
由于类型擦除,不能直接实例化泛型类型参数:
public class Box<T> {
private T t;
public Box() {
// t = new T(); // 错误:无法实例化泛型类型
}
}静态上下文中的泛型类型参数
静态方法和静态变量不能引用类的类型参数:
public class Box<T> {
private static T t; // 错误:无法在静态上下文中使用泛型类型参数
}
本文链接:
/archives/1722999127193
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
知行合一!
喜欢就支持一下吧