2012-03-30 6 views
1

Ich habe dieses Beispiel aus dem Internet genommen. Aber wenn ich versuchte, es ist nicht kompilieren sagen kann nicht Objekt in String konvertierenJava: Inside Enhanced for Schleife kann nicht Objekt an String

import java.util.ArrayList; 

public class Test { 

    public static void main(String[] args) { 
     ArrayList names = new ArrayList(); 

     names.add("Amy"); 
     names.add("Bob"); 
     names.add("Chris"); 
     names.add("Deb"); 
     names.add("Elaine"); 
     names.add("Frank"); 
     names.add("Gail"); 
     names.add("Hal"); 

     for (String nm : names) 
      System.out.println((String)nm); 

    } 
} 

Wenn es eine normale for-Schleife ist i list.get getan haben könnte (Elementindex) .toString(). aber wie in der erweiterten for-Schleife zu tun?

+0

Verwenden Sie ArrayList anstelle von ArrayList – dexametason

Antwort

6

Sie sollten nicht Bypass Typsicherheit durch den Aufruf toString() - sollten Sie Generika verwenden, um mit zu beginnen:

List<String> names = new ArrayList<String>(); 

nun Ihre for Schleife kompiliert (Sie btw im System.out.println Aufruf des gegossenen loswerden kann) und Der Compiler verhindert, dass Sie Ihrer Liste einen String hinzufügen.

Siehe Java generics tutorial für einen Ausgangspunkt auf Generika, und die Java Generics FAQ für mehr Informationen, die Sie schon immer wissen wollen, werden :)

+0

Große Antwort, ich dachte nicht, dass es eine Beziehung für Enhanced for Loop und Generics geben würde. Danke vielmals . – Pawan

+0

Ich habe noch eine Frage, warum Leute die Liste verwenden names = new ArrayList (); anstelle von ArrayList name = new ArrayList (); ? – Pawan

+0

@ yyyi777 Siehe [Was bedeutet es, auf eine Schnittstelle zu programmieren?] (Http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface) – Jesper

1

Sie haben Generics nicht verwendet, so dass Sie nicht sicher tun können:

for (String nm : names) 

Da Ihre ArrayList Objekte enthält, von denen String ein Objekt ist. Sie müssen sicher mit Java 5 oder höher installiert sein, so verwenden Generics Ihre Liste zu sagen, nur Strings enthalten:

List<String> names = new ArrayList<String>(); 

Wenn Sie nicht Generics haben Sie dabei tun müssen:

for (Object nm : names) 
      System.out.println(nm); 

Passing Das Objekt für die println-Methode ruft sowieso seine toString-Methode auf.

Aber verwenden Sie Generics!