tsk*_*zzy 10 java iterator iterable
Iterable<E>是在,java.lang而Iterator<E>在java.util.这有充分的理由还是仅仅是一个糟糕设计的神器?
这似乎很奇怪,因为唯一Iterable<E>有益的是提供一个Iterator<E>.
编辑:一个潜在的原因是因为(then-)新引入的每个循环.我想我的问题是,它们是否相同?
for(Object o : collection)
...
vs
for( Iterator iter = collection.iterator(); iter.hasNext(); ) {
o = iter.next();
...
Run Code Online (Sandbox Code Playgroud)
如果它们是,那么仍然无法解释为什么这两个类在不同的包中,因为编译器必须导入java.util才能使用该Iterator构造.
部分原因是历史:Iterator自JDK 1.2以来一直与我们合作,并Iterable附带JDK 1.5. Iterable进来了增强的for循环.
糟糕的设计?不,进化.没有全知的创造者.随着经验的学习,它们被整合到JDK中.
java.lang保留用于语言功能依赖的类. Iterable通过for-each循环直接提供语言级别支持但Iterator不支持.
大多数集合都是实现的,Iterable因此您可以使用方便的for循环语法:
Iterable<T> someIterableThing;
for (T x : someIterableThing) { ... }
Run Code Online (Sandbox Code Playgroud)
我想这Iterable是java.lang因为它与这种语法密切相关,这是Java语言的一个特性.
| 归档时间: |
|
| 查看次数: |
5016 次 |
| 最近记录: |