Java中Iterator配合泛型实现通用打印方法的核心是定义静态泛型方法public static void printAll(Iterator it),通过类型参数统一元素类型,遍历时直接获取T类型对象,无需强转,保障类型安全与复用性。

Java 中 Iterator 配合泛型实现通用打印方法,核心是让方法接收任意类型的 Iterator<t></t>,再通过泛型参数 T 统一处理元素类型,避免强转、提升类型安全和复用性。
泛型打印方法的定义方式
定义一个静态泛型方法,参数为 Iterator<t></t>,返回 void 或 void 类型无关,重点是能遍历并打印所有元素:
- 方法签名需声明类型参数
<t></t>,放在返回值前 - 参数类型写成
Iterator<t></t>,编译器自动推断实际类型(如Iterator<string></string>或Iterator<integer></integer>) - 循环中直接使用
next()获取T类型对象,无需强制转换
示例代码:
public static <T> void printAll(Iterator<T> it) {
while (it.hasNext()) {
T item = it.next(); // 类型安全,item 就是 T 类型
System.out.println(item);
}
}
如何调用泛型打印方法
只要集合实现了 Iterable(所有 Collection 子类都满足),就能用 iterator() 获取对应泛型迭代器,直接传入:
立即学习“Java免费学习笔记(深入)”;
ArrayList<string> list = new ArrayList(); list.add("a"); list.add("b"); printAll(list.iterator());</string>HashSet<integer> set = new HashSet(); set.add(100); set.add(200); printAll(set.iterator());</integer>- 甚至自定义泛型容器(如前文
Gys<double></double>),只要它提供iterator(): Iterator<double></double>方法,也能用
增强版:支持自定义格式与空值处理
可在泛型方法中加入简单扩展,比如添加前缀、跳过 null、或用分隔符拼接:
- 加前缀示例:
System.out.println("[Item] " + item); - 防空指针:
if (item != null) System.out.println(item); - 拼接字符串(需额外收集):
StringBuilder sb = new StringBuilder(); while(it.hasNext()) { sb.append(it.next()).append(", "); } System.out.println(sb.toString());
为什么不能直接传 Collection?
虽然 Collection<t></t> 更直观,但 Iterator 是更底层、更通用的抽象:
- 某些只读数据源(如流式解析器、数据库游标)可能只提供
Iterator,不暴露完整集合 - 避免方法内部误调用
add/remove等集合操作,聚焦“只读遍历”语义 - 泛型擦除后,
Iterator<t></t>比Collection extends T>更简洁明确



















