我从网上采用了这个例子。 但是,当我尝试它不是编译说不能将对象转换为字符串
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 :(得分: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方法。
但请使用泛型!