hello啊,各位观众姥爷们!!!本baby今天又来了!哈哈哈哈哈嗝
Java 泛型(Generics) 是 Java 5 引入的一项重要特性,用于增强代码的类型安全性和重用性。泛型允许在定义类、接口和方法时使用类型参数,从而使代码更加通用且减少类型转换的需求。
泛型的核心思想是 参数化类型,即在定义类、接口或方法时,使用一个或多个类型参数(通常用 T
、E
、K
、V
等表示),在实际使用时再指定具体的类型。
// 定义一个泛型类
class Box<T> {
private T value;
public void setValue(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
// 使用泛型类
Box<Integer> integerBox = new Box<>();
integerBox.setValue(123);
System.out.println(integerBox.getValue()); // 输出: 123
Box<String> stringBox = new Box<>();
stringBox.setValue("Hello");
System.out.println(stringBox.getValue()); // 输出: Hello
Box
是一个泛型类,T
是类型参数。Box
表示 T
被替换为 Integer
,Box
表示 T
被替换为 String
。T
。K
和 V
(常用于键值对)。T
:类型(Type)E
:元素(Element)K
:键(Key)V
:值(Value)N
:数字(Number)class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() { return key; }
public V getValue() { return value; }
}
Pair<String, Integer> pair = new Pair<>("Age", 25);
System.out.println(pair.getKey() + ": " + pair.getValue()); // 输出: Age: 25
泛型方法是在方法级别使用类型参数,可以在普通类、泛型类或静态方法中定义。
class Util {
// 定义一个泛型方法
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.print(element + " ");
}
System.out.println();
}
}
// 使用泛型方法
Integer[] intArray = {1, 2, 3};
String[] strArray = {"A", "B", "C"};
Util.printArray(intArray); // 输出: 1 2 3
Util.printArray(strArray); // 输出: A B C
是方法的类型参数。T
的具体类型。泛型通配符 ?
用于表示未知类型,通常用于方法参数中,以增强灵活性。
>
表示任意类型。
public void printList(List<?> list) {
for (Object element : list) {
System.out.print(element + " ");
}
System.out.println();
}
extends T>
表示类型必须是 T
或其子类。
public double sumOfList(List<? extends Number> list) {
double sum = 0.0;
for (Number number : list) {
sum += number.doubleValue();
}
return sum;
}
super T>
表示类型必须是 T
或其父类。
public void addNumbers(List<? super Integer> list) {
for (int i = 1; i <= 5; i++) {
list.add(i);
}
}
Java 的泛型是通过 类型擦除(Type Erasure) 实现的,即在编译时擦除类型参数,将其替换为 Object
或上界类型。
class Box<T> {
private T value;
public void setValue(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
// 编译后,Box 会被擦除为:
class Box {
private Object value;
public void setValue(Object value) {
this.value = value;
}
public Object getValue() {
return value;
}
}
Box
是非法的,必须使用包装类 Box
。new T()
是非法的。new T[10]
是非法的。List
、Map
。Collections.sort(List)
。IDEA ji huo
https://pan.quark.cn/s/4216736c0427
最新大全(唐探)
https://kdocs.cn/l/cqhxNU9I2lLD
deepSeek最全资料包
https://pan.quark.cn/s/2308ac09ed43