标签:抽象方法 应该 one -- 设计 过程 抽象 UI 简单
Iterator:我们先来看一下这个接口,实际上的抽象方法就2个,hasNext和next
package java.util; import java.util.function.Consumer; public interface Iterator<E> { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consumer<? super E> action) { Objects.requireNonNull(action); while (hasNext()) action.accept(next()); } }
1、hasNext是用于判断是否有下一个元素,看到这个方法,大家应该也知道Iterator接口是用于什么样的数据了--集合|数组类型
2、next是用于获取下一个元素的方法
这两个方法组成了这样的调用方式:
while(iterator.hasNext()) { Object one = iterator.next(); one.action(); }
它不像js中的调用方式
$("a").each(function(obj) { obj.action(); })
js采用的是传入回调函数,通过调用回调函数的方式来遍历集合执行动作
所以我们把js的这种方式称为:内部迭代器
特点也很明显
内部迭代器需要集合支持传入回调函数
而且无法在操作的过程中直接中断操作等
并且会引入闭包问题,即在内部迭代器中调用当前上下文变量的问题
所以在使用中,倾向于灵活的外部遍历,或者倾向于简单的内部遍历,见仁见智
迭代器的设计意图经过上述的例子,也比较清晰了
使得不同的集合类型,可以用相同的方式来遍历
标签:抽象方法 应该 one -- 设计 过程 抽象 UI 简单
原文地址:http://www.cnblogs.com/gabin/p/6536446.html