/**
* 书本:《Thinking In Java》
* 功能:我们希望在默认的向前迭代器的基础上,添加产生反向迭代器的能力。
* 文件:AdapterMethodIdiom.java
* 时间:2015年4月8日19:59:01
* 作者:cutter_point
*/
package Lesson11holdingyourobjects;
import java.util.*;
class ReversibleArrayList<T> extends ArrayList<T>
{
public ReversibleArrayList(Collection<T> c) { super(c); }
public Iterable<T> reversed()
{
return new Iterable<T>() //第一个匿名的内部类
{
@Override
public Iterator<T> iterator() //Iterable里面的必须实现的方法
{
return new Iterator<T>() //返回值是第二个匿名内部类
{
int current = size() - 1; //这个size是ArrayList里面的函数,继承过来的
@Override
public boolean hasNext()
{
return current > -1;
}
@Override
public T next()
{
return get(current--); //这个是向前推进的
}
@Override
public void remove()
{
throw new UnsupportedOperationException();
}
};
}
};
}
}
public class AdapterMethodIdiom
{
public static void main(String [] args)
{
ReversibleArrayList<String> ral = new ReversibleArrayList<String>(Arrays.asList("To be or not to be".split(" ")));
for(String s : ral)
System.out.print(s + " ");
System.out.println();
//向前遍历
for(String s : ral.reversed())
System.out.print(s + " ");
}
}
预览:
To be or not to be
be to not or be To