2012-03-30 116 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方法。

但使用泛型!