Pas*_*ent 21
Stephen Colebourne(Joda-Time,JSR-310等)对优势和缺点进行了很好的总结.针对每个循环迭代控制提议进行了增强,以便在Java 7中扩展它:
特色摘要:
扩展Java 5 for-each循环以允许访问循环索引,无论这是第一次还是最后一次迭代,并删除当前项.
主要优势
for-each循环几乎可以肯定是Java 5中最新的流行功能.它的工作原理是它增加了抽象级别 - 而不是必须表达如何围绕列表或数组循环的低级细节(带索引或迭代器),开发人员只是声明他们想要循环,语言负责其余部分.但是,只要开发人员需要访问索引或删除项目,所有好处就会丢失.
每项工作的原始Java 5在一系列旨在解决80%案例的问题上采取了相对保守的立场.然而,循环在编码中是如此常见的形式,其余未处理的20%代表了重要的代码体.
将循环从for转换为基于索引或迭代器的过程是痛苦的.这是因为旧的循环风格如果显着更低级别,则更冗长,更不清晰.这也很痛苦,因为大多数IDE都不支持这种"去重构".
主要好处:
常见的编码习惯用比现在更高的抽象表达.这有助于提高可读性和清晰度.
...
总而言之,增强的for循环提供了一种简洁的高级语法来循环列表或数组,从而提高了清晰度和可读性.但是,它错过了一些部分:允许访问索引循环或删除项目.
sly*_*7_7 12
对我而言,很明显,主要优点是可读性.
for(Integer i : list){
....
}
Run Code Online (Sandbox Code Playgroud)
显然比什么更好
for(int i=0; i < list.size(); ++i){
....
}
Run Code Online (Sandbox Code Playgroud)
我认为这里介绍它的文档页面已经很好地总结了这一点。
\n\n\n\n\n迭代集合比它需要的更丑陋
\n
如此真实..
\n\n\n\n\n迭代器只是混乱。此外,这也是犯错误的机会。迭代器变量在每个循环中出现三次:这是出错的两次机会。for-each 结构消除了混乱和出错的机会。
\n
确切地
\n\n\n\n\n当您看到冒号 (:) 时,请将其读作 \xe2\x80\x9cin.\xe2\x80\x9d 对于 c.\xe2\x80\x9d 中的每个 TimerTask t,上面的循环读作 \xe2\x80\x9c看,for-each 结构与泛型完美地结合在一起。它保留了所有的类型安全性,同时消除了剩余的混乱。因为您不必声明迭代器,所以也不必为其提供通用声明。(编译器在背后为你做这件事,但你不必关心它。)
\n
我想进一步总结一下,但我认为该页面做得非常完美。
\n