java泛型与iterator结合可在编译期锁定元素类型,实现类型安全遍历:泛型约束集合元素类型并拦截非法插入,iterator泛型使next()直接返回具体类型,避免强制转换和classcastexception。

Java 中泛型与 Iterator 结合,能从编译期就锁定元素类型,避免运行时类型错误,实现真正安全的遍历。
泛型约束集合的元素类型
泛型在声明集合时就限定了可存入的类型,比如 List
- 没有泛型时,集合存的是 Object,取出来必须强制转换,一旦类型不符,运行时报 ClassCastException
- 有了泛型,get() 或 next() 的返回值就是具体类型(如 String),无需 cast,也无类型擦除后的歧义
- 泛型信息虽在运行时被擦除,但编译器已用它做了完整校验,保障了源头安全
Iterator 与泛型配合完成类型安全遍历
Iterator 接口本身支持泛型,Iterator
- 调用 list.iterator() 时,编译器根据 list 的泛型推导出 Iterator 的类型参数
- while (it.hasNext()) { String s = it.next(); } —— 这里 s 直接是 String,不会出现 Object 强转风险
- 增强 for 循环(for (String s : list))本质就是语法糖,底层仍调用泛型 Iterator,同样享受类型安全
避免遍历时的并发修改异常
Iterator 提供 fail-fast 机制,但仅靠它不能解决所有安全问题。类型安全之外,还需注意操作安全:
- 遍历中用 iterator.remove() 删除当前元素是安全的;用 list.remove() 会触发 ConcurrentModificationException
- 若需多线程遍历,应选用线程安全集合(如 CopyOnWriteArrayList)或加锁,而非依赖 Iterator 自身
- 泛型不解决并发问题,但它让每个操作的目标类型清晰,降低误用概率(比如不会把 Integer 当 String remove)
自定义可遍历类也要实现泛型 Iterable
如果自己写容器类并希望支持 for-each 和类型安全遍历,必须实现 Iterable
- 重写 iterator() 方法,返回一个泛型 Iterator
- Iterator 实现类中,next() 返回 E 类型,hasNext() 判断逻辑与类型无关,但整体受泛型约束
- 这样外部就能写 for (String s : myContainer) —— 编译器知道 s 是 String,不会松动类型边界
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











