掌握 Java 泛型:构建可复用、类型安全的代码
Java 泛型:构建可复用、类型安全的代码
本指南讲解 Java 泛型、如何编写泛型类和方法及其优势,配清晰示例。
Java 泛型让你编写一个类、接口或方法操作多种数据类型,同时保持编译期类型安全。
注意:泛型不适用于基本类型(int、float、char 等)。
Java 泛型类
声明类型参数可创建适用于任意对象类型的类。
示例:创建泛型类
class Main {
public static void main(String[] args) {
GenericsClass<Integer> intObj = new GenericsClass<>(5);
System.out.println("Generic Class returns: " + intObj.getData());
GenericsClass<String> stringObj = new GenericsClass<>("Java Programming");
System.out.println("Generic Class returns: " + stringObj.getData());
}
}
class GenericsClass<T> {
private T data;
public GenericsClass(T data) {
this.data = data;
}
public T getData() {
return this.data;
}
}
输出
Generic Class returns: 5 Generic Class returns: Java Programming
GenericsClass 是泛型类,T 为类型参数。创建两个实例:
- intObj – T 替换为
Integer,类处理整数 - stringObj – T 替换为
String,类处理字符串
Java 泛型方法
方法也可为泛型,接受任意类型参数同时保持类型安全。
示例:创建泛型方法
class Main {
public static void main(String[] args) {
DemoClass demo = new DemoClass();
demo.<String>genericsMethod("Java Programming");
demo.<Integer>genericsMethod(25);
}
}
class DemoClass {
public <T> void genericsMethod(T data) {
System.out.println("Generics Method:");
System.out.println("Data Passed: " + data);
}
}
输出
Generics Method: Data Passed: Java Programming Generics Method: Data Passed: 25
编译器能推断类型时可省略显式类型参数:
demo.genericsMethod("Java Programming");
有界类型
有时需泛型类型仅接受特定类族。有界类型用 extends 关键字实现。
语法:<T extends A> – T 可以是 A 或其任意子类型。
示例:有界类型
class GenericsClass <T extends Number> {
public void display() {
System.out.println("This is a bounded type generics class.");
}
}
class Main {
public static void main(String[] args) {
// GenericsClass<String> obj = new GenericsClass<>(); // 编译时错误
}
}
GenericsClass 仅接受数值类型(Integer、Double 等)。尝试用 String 实例化导致编译错误:
GenericsClass<String> obj = new GenericsClass<>(); ^ reason: inference variable T has incompatible bounds equality constraints: String lower bounds: Number where T is a type-variable: T extends Number declared in class GenericsClass
Java 泛型优势
1. 代码复用
泛型代码可操作多种数据类型,减少重复。单一方法可处理整数、字符串和自定义对象。
2. 编译期类型检查
类型参数编译期已知,编译器可在运行前检测类型不匹配。
3. 与集合无缝集成
Java 集合框架基于泛型,使集合强制类型安全。例如:
ArrayList<String> list1 = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();
其他集合类(LinkedList、Queue、Map 等)同样使用泛型获取相同优势。
java
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 精通 Java 继承:核心概念、类型与实战示例
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 精通 Java ArrayList:操作、方法与最佳实践
- Java Stack 类全面指南:用法、核心方法与实战示例
- Java HashSet 类完全指南:操作、方法与集合论实战
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除