Java泛型是一种编程特性,它允许在类、接口和方法中定义类型参数,从而提供类型安全。以下是Java泛型的一些基本用法:
泛型类
定义泛型类时,在类名后面使用尖括号`
public class MyGeneric
{ private T data;
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
}
泛型方法
定义泛型方法时,在方法返回值前使用尖括号`
public class GenericMethods {
public static
T firstElement(T[] array) { return array;
}
}
泛型实例化
实例化泛型类时,需要指定类型参数的具体值。
MyGeneric
myGeneric = new MyGeneric<>(); myGeneric.setData("Hello, world!");
String str = myGeneric.getData();
泛型参数推断
Java编译器可以根据方法调用或返回值自动推断泛型参数的类型。
public class GenericInference {
public static
void print(T item) { System.out.println(item);
}
public static void main(String[] args) {
print("Hello"); // 编译器推断T为String类型
print(123);// 编译器推断T为Integer类型
}
}
泛型与通配符
Java泛型支持通配符`?`,用于表示未知类型。
public class Wildcards {
public static void printList(List<?> list) {
for (Object item : list) {
System.out.println(item);
}
}
}
注意事项
泛型类型参数必须是引用类型,不能是基本数据类型。
泛型类不能继承`Exception`类。
泛型数组不能直接创建,因为泛型擦除后类型信息丢失。
静态方法中不能使用泛型类型参数。
泛型类中不应重写`equals`方法,避免与`Object`类的`equals`方法冲突。
示例代码
// 泛型类示例
public class Pair
{ 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;
}
}
// 泛型方法示例
public class GenericUtility {
public static
T max(T a, T b) { return a.compareTo(b) > 0 ? a : b;
}
}
以上是Java泛型的一些基本用法。泛型提供了一种类型安全的方式来处理不同的数据类型,同时增加了代码的复用性和灵活性