1700467046
1700467047
//产生一个遍历对象
1700467048
1700467049
public IProjectIterator iterator(){
1700467050
1700467051
return new ProjectIterator(this.projectList);
1700467052
1700467053
}
1700467054
1700467055
}
1700467056
1700467057
通过构造函数,传递了一个项目所必须的信息,然后通过iterator()方法,把所有项目都返回到一个迭代器中。Iterator()方法看不懂不要紧,继续向下阅读。再看IProjectIterator接口,如代码清单20-6所示。
1700467058
1700467059
代码清单20-6 项目迭代器接口
1700467060
1700467061
public interface IProjectIterator extends Iterator{
1700467062
1700467063
}
1700467064
1700467065
大家可能对该接口感觉很奇怪,你定义的这个接口方法、变量都没有,有什么意义呢?有意义,所有的Java书上都会说要面向接口编程,你的接口是对一个事物的描述,也就是说我通过接口就知道这个事物有哪些方法,哪些属性,我们这里的IProjectIterator是要建立一个指向Project类的迭代器,目前暂时定义的就是一个通用的迭代器,可能以后会增加IProjectIterator的一些属性或者方法。当然了,你也可以在实现类上实现两个接口,一个是Iterator,一个是IProjectIterator(这时候,这个接口就不用继承Iterator),杀猪杀尾巴,各有各的杀法。我的习惯是:如果我要实现一个容器或者其他API提供接口时,我一般都自己先写一个接口继承,然后再继承自己写的接口,保证自己的实现类只用实现自己写的接口(接口传递,当然也要实现顶层的接口),程序阅读也清晰一些。我们继续看迭代器的实现类,如代码清单20-7所示。
1700467066
1700467067
代码清单20-7 项目迭代器
1700467068
1700467069
public class ProjectIterator implements IProjectIterator{
1700467070
1700467071
//所有的项目都放在这里ArrayList中
1700467072
1700467073
private ArrayList<IProject>projectList=new ArrayList<IProject>();
1700467074
1700467075
private int currentItem=0;
1700467076
1700467077
//构造函数传入projectList
1700467078
1700467079
public ProjectIterator(ArrayList<IProject>projectList){
1700467080
1700467081
this.projectList=projectList;
1700467082
1700467083
}
1700467084
1700467085
//判断是否还有元素,必须实现
1700467086
1700467087
public boolean hasNext(){
1700467088
1700467089
//定义一个返回值
1700467090
1700467091
boolean b=true;
1700467092
1700467093
if(this.currentItem>=projectList.size()||this.projectList.get(this.currentItem)==null){
1700467094
1700467095
b=false;
[
上一页 ]
[ :1.700467046e+09 ]
[
下一页 ]