要让自定义类支持增强for循环,必须显式实现iterable接口并提供每次调用都返回新iterator实例的iterator()方法,泛型t需与遍历元素类型一致,且iterator需正确实现hasnext()和next()。

要让自定义类支持增强 for 循环,核心是实现 Iterableiterator() 方法。这不是“加个注解”或“配个配置”,而是明确写出迭代逻辑。
让类实现 Iterable 接口
你的自定义类需声明实现 Iterable,比如你想遍历一组整数,就写 implements Iterable<integer></integer>。这会强制你实现唯一抽象方法:Iterator<integer> iterator()</integer>。
- 泛型参数
T应与你要暴露给 for-each 的元素类型一致 - 不能只实现
Collection或随便继承某个集合类——必须显式实现Iterable或其子接口(如Collection已继承它)
提供真正可用的 Iterator 实例
iterator() 方法不能返回 null,也不能复用旧的迭代器对象。它必须每次调用都新建一个独立的、状态干净的 Iterator 实例。
- 推荐使用私有内部类实现
Iterator<t></t>,封装遍历状态(如当前索引、数据源引用) -
hasNext()要准确判断是否还有未访问元素 -
next()要返回当前元素并推进状态;若无元素应抛NoSuchElementException -
remove()可选实现(通常留空或抛UnsupportedOperationException)
验证能否用于 for-each
写完后,直接用增强 for 循环测试:
MyContainer
container.add("a"); container.add("b");
for (String s : container) {
System.out.println(s);
}
只要不报编译错误,且输出符合预期,说明已正确支持。如果报错 “cannot be used in enhanced for loop”,大概率是没实现 Iterable,或泛型不匹配,或 iterator() 方法签名写错了(比如漏了 <t></t>)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











