下面错误想不通为什么
public class Question61 {
public static Iterator reverse(List list){
Collections.reverse(list);
return list.iterator();

}

public static void main(String[] args) {

List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
for(Object obj:reverse(list))
System.out.println(obj+",");
         }
  }
为什么把reverse(list)换成list就行了,那个方法返回的不是一个遍历么,为什么会报错呢???

解决方案 »

  1.   

    java的foreach循环好像只能支持数组和List吧,可能不能支持Iterator吧。不过我只是说可能,我没有试。
      

  2.   


    for(Object obj:reverse(list)) 
    错在这句,reverse(list)返回的是一个Iterator而不是一个List
      

  3.   

    for each 循环要求的参数是集合类型,Iterator是一个迭代类,不是集合
      

  4.   

    for(variable:collection)
    collection必须是数组或是实现了lterable接口的类(例如ArrayList)对象,Iterable接口的实现类可查看api
      

  5.   

     你迭代的是一个Iterator 型? 应该要是一个List型
      

  6.   

    是List型 不应该要是Iterator 型
      

  7.   


    再看看 增强型for循环语句的使用吧 !
      

  8.   

    java.util.Iterator<T> 不是 java.lang.Iterable<T>,如果返回的是 Iterable<T> 就对了。另:C# 真变态,Iterator 居然是 Iterable 的子类。按照逻辑来说,应该是每个可迭代类型都有一个迭代器才对,那么实现的方式一个是类似于 Java 这样的聚合,一个是继承,但是继承也是 Iterable 继承 Iterator 才对……只能说明:微软的想法不是我们凡人能理解的……
      

  9.   

    你犯了2个错误:
    1,方法调用方式
    类名.静态方法();如Collections.reverse(list);
    对象.方法();如list.add("1");
    只有在本类中才可以,省略“类名.”,“对象.”

    2,Collections.reverse(list)返回类型是void的
    所以他的结果不可以遍历

    3,把程序改为下面就是你想要的结果了List<String> list = new ArrayList(); 
    list.add("1"); 
    list.add("2"); 
    list.add("3"); 
    //reverse之前,list中的值是"1","2","3"
    Collections.reverse(list);
    //reverse之前,list中的值是"3","2","1"
    for(Object obj:list) {
    System.out.println(obj+","); 

      

  10.   

    楼主你真有想法  用Iterator当循环载体!
      

  11.   

    这么说可能更好懂些:for(Object obj:collection) 冒号后面的参数要求是个集合或者数组的,给个迭代器它不认的。
      

  12.   

    恩,谢谢大家,我scjp轻松拿下,哈哈多谢大家帮忙,小弟谢了~
      

  13.   

    是List型 不应该要是Iterator 型
      

  14.   

    Collections.sort(list,Collections.reverseOrder());