java:Inside Enhanced for循环不能Object to String

时间:2012-03-30 06:43:34

标签: java

我从网上采用了这个例子。 但是,当我尝试它不是编译说不能将对象转换为字符串

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循环中做什么?

2 个答案:

答案 0 :(得分:6)

您不应该通过调用toString()来绕过类型安全 - 您应该使用泛型开头:

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

现在你的for循环将被编译(你可以摆脱System.out.println调用btw中的强制转换)编译器会阻止你添加非字符串到你的清单。

有关泛型的起点,请参阅Java generics tutorial;有关您想知道的更多信息,请参阅Java Generics FAQ。)

答案 1 :(得分:1)

你没有使用过泛型,所以你不能安全地做:

for (String nm : names)

由于您的ArrayList包含对象,其中String是对象。您肯定必须使用Java 5或更高版本,因此请使用Generics说您的List只包含字符串:

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

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

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

将Object传递给println方法无论如何都会调用它的toString方法。

但请使用泛型!