import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@SuppressWarnings("serial")
public class ReversibleArrayList<T> extends ArrayList<T> {
public ReversibleArrayList(Collection<T> c) {
super(c);
} public Iterable<T> reversed() {
return new Iterable<T>() {
public Iterator<T> iterator() {
return new Iterator<T>() {
int current = size() - 1; public boolean hasNext() {
return current > -1;
} public T next() {
return get(current--);
} public void remove() { // Not implemented
throw new UnsupportedOperationException();
}
};
}
};
}

}这个java类的reversed() 方法的写法没见过,哪位大哥能帮忙解释下,说下原理啊,包括里面的每句话。

解决方案 »

  1.   

    自学java,对这种写法不是太了解,请高手们帮忙解释下
      

  2.   

    方法实现了Iterator迭代器功能
      

  3.   

    <>代表的是集合类,是在java.util包中提供的一些集合类,常用的有List,Set,Map. 
    List和Set实现了Collection接口,其中带有add(),romove(),retainAll()等一些方法
      

  4.   

    你说的是泛型把,用T来代表任意一个Class类,在实际使用的时候可以用具体类代替,从而省去类型转换。
      

  5.   

    return new Iterable <T>() { 方法() }
    主要是这总方式不理解, 一般都是 new ClassName(); 
    后面没有带{}
      

  6.   

    new Iterable <T>() { }是实现了ReversibleArrayList <T> 中的的一个匿名的内部类
    new Iterator <T>() {}是实现了new Iterable <T>() { }中的的一个匿名的内部类
    我想是这样的吧
    Iterable <T>是种泛型集合,表示集合中只能放入T这种类型的数据
      

  7.   

    public class AdapterMethodIdiom {
    public static void main(String[] args) {
    ReversibleArrayList<String> ral = new ReversibleArrayList<String>(
    Arrays.asList("To be or not to be".split(" ")));
    // Grabs the ordinary iterator via iterator():
    for (String s : ral)
    System.out.print(s + " ");
    System.out.println();
    // Hand it the Iterable of your choice
    for (String s : ral.reversed())
    System.out.print(s + " ");
    }
    }这是它的测试类,单步调试看到了他的运行过程,怎么看都看不懂
      

  8.   

    泛型已经理解,关键就是reversed() 方法return new Iterable <T>() { 方法() } 这一句
      

  9.   


    public Iterable <T> reversed() {
        return new Iterable <T>() {
            public Iterator <T> iterator() {
                return new Iterator <T>() {
                    int current = size() - 1;//得到当前arraylist的大小                public boolean hasNext() {  //判断是否有下一个值
                        return current > -1;
                    }                public T next() {     //得到下一个值
                        return get(current--);
                    }                public void remove() { 
                        throw new UnsupportedOperationException(); // 不可删除元素
                    }
                };
            }
        };

    reversed()方法返回一个迭代器,而返回的这个迭代器有一个重载的迭代方法iterator(),而这个迭代方法iterator()返回该ArrayList的一个自定义的迭代器实际上就是完成了ReversibleArrayList 类的迭代器方法
      

  10.   

    一句话,reversed()方法返回一个反转迭代器,也就是从索引this.size()-1到索引0的迭代器。 这个迭代器的迭代顺序和正常的向反。
      

  11.   

    这是匿名内部类的写法,也可以把Iterable <T>() { 方法() } 定义成ClassName,再调用new ClassName();