Erro foreach

5 respostas
kaduzick

Aí galera, me deparei com uma boa questão.
Alguem sabe me dizer porque não compila?

import java.util.List;
import java.util.*;

public class Teste
{
    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)) -- Não Compila ... alguem sabe me dizer o porquê? 
        {
            System.out.print(obj + ",");
        }
    }
}

Erro -> foreach not applicable to expression type

5 Respostas

E

Troque por

for (Object obj: Collections.reverse(list))
Christian_Borges

Tenta o código abaixo:

import java.util.List;  
import java.util.*;  
   
 public class Teste  
 {  

       public static void main(String[] args) {  
      
         List<Object> list = new ArrayList<Object>();  
         list.add(" 1");   
         list.add("2");   
         list.add("3");  
         
         for (Object obj: reverse(list))    
         {  
             System.out.print(obj + ",");  
         }  
		
	

	}
	
	public static List<Object> reverse(List<Object> list) {  
        Collections.reverse(list);  
        return list;  
    }  

}
kaduzick

Christian,

eu gostaria de saber porque não compila do outro jeito.

ViniGodoy

O for each funciona com coisas que tem um Iterator (implementam a interface Iterable), não com o Iterator em si.

Note que não funcionaria mesmo que você não tivesse o reverse:

Errado:
for (Object obj : list.iterator()) //Erro, se itera sobre a lista, não sobre o iterator
Certo:
for (Object obj : list)

Não confunda o objeto iterável (no caso, o List, ou o resultado do Collections.reverse()), com o mecanismo que realiza a iteração em si (for each, iterator).

kaduzick

É isso mesmo ViniGodoy.

Encontrei aqui no site da sun, muito obrigado pela sua resposta.

Criado 30 de novembro de 2009
Ultima resposta 30 de nov. de 2009
Respostas 5
Participantes 4