一个简单(不完全现实)的例子来说明上面的一些建议。考虑看似无害的
while(true)
for(Iterator iter = foo.iterator(); iter.hasNext();)
bar.doSomething( iter.next() )
甚至更高的水平
while(true)
for(Baz b: foo)
bar.doSomething(b)
这里一个可能的问题是,每次在while循环中都会创建一个新对象(迭代器)。如果您只关心程序员的便利性,那么后者肯定更好。但是,如果循环必须高效或机器资源受限,那么您几乎将受制于高级语言的设计者。
例如,对执行高性能 Java 的典型抱怨是在回收垃圾(例如所有分配的 Iterator 对象)时执行停止。如果您的软件负责跟踪来袭导弹、自动驾驶客机,或者只是不让用户想知道为什么 GUI 停止响应,这不是很好。
一种可能的解决方案(仍然使用高级语言)是将迭代器的便利性削弱为类似
Iterator iter = new Iterator();
while(true)
for(foo.initAlreadyAllocatedIterator(iter); iter.hasNext();)
bar.doSomething(iter.next())
但这只有在您对内存分配有所了解时才有意义……否则它看起来就像一个讨厌的 API。便利总是在某处付出代价,了解较低级别的东西可以帮助您识别和降低这些成本。