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

要让自定义类支持增强 for 循环,核心是实现 Iterable<T> 接口,并在其中提供一个每次调用都返回新迭代器的 iterator() 方法。这不是“加个注解”或“配个配置”,而是明确写出迭代逻辑。
让类实现 Iterable<T> 接口
你的自定义类需声明实现 Iterable<元素类型>,比如你想遍历一组整数,就写 implements Iterable<Integer>。这会强制你实现唯一抽象方法:Iterator<Integer> iterator()。
- 泛型参数
T应与你要暴露给 for-each 的元素类型一致 - 不能只实现
Collection或随便继承某个集合类——必须显式实现Iterable或其子接口(如Collection已继承它)
提供真正可用的 Iterator 实例
iterator() 方法不能返回 null,也不能复用旧的迭代器对象。它必须每次调用都新建一个独立的、状态干净的 Iterator 实例。
- 推荐使用私有内部类实现
Iterator<T>,封装遍历状态(如当前索引、数据源引用) -
hasNext()要准确判断是否还有未访问元素 -
next()要返回当前元素并推进状态;若无元素应抛NoSuchElementException -
remove()可选实现(通常留空或抛UnsupportedOperationException)
验证能否用于 for-each
写完后,直接用增强 for 循环测试:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
MyContainer<String> container = new 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>)。

















