2012-03-30 32 views
1

我已经从网络中采取了这个例子。 但是,当我尝试它不编译说不能对象转换为字符串java:内部增强for循环不能对象字符串

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); 

    } 
} 

如果这是一个正常的循环我可以做list.get(元素索引)的ToString()。 但如何在增强for循环?

+0

使用ArrayList 而不是ArrayList – dexametason 2012-03-30 06:46:23

回答

6

你应该通过调用toString()无法绕过类型安全 - 你应该使用泛型入手:

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

现在你for循环将编译(你可以得到BTW摆脱在System.out.println通话中投) 编译器将阻止您向列表中添加非字符串。

Java generics tutorial为仿制药起点,和Java Generics FAQ了解更多信息,你会永远想知道:)

+0

好的答案,我没有想到会有一个关系为增强for循环和泛型。非常感谢 。 – Pawan 2012-03-30 06:47:42

+0

我还有一个问题,为什么人们使用列表 names = new ArrayList (); ,而不是ArrayList names = new ArrayList (); ? – Pawan 2012-03-30 06:48:40

+0

@ yyyi777请参阅[编程接口的含义是什么?](http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface) – Jesper 2012-03-30 06:50:55

1

您没有使用泛型,所以你不能安全地完成:

for (String nm : names) 

由于您的ArrayList保存对象,其中字符串是一个对象。你肯定是使用Java 5或以上,因此使用泛型说你的名单将只包含字符串:

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

如果你没有使用泛型,你需要做的:

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

传无论如何,println方法的Object将调用其toString方法。

但使用泛型!