我正试图通过它的位置从ArrayList
获取一个元素。我在获取Object cannot be converted to a string
元素的行上收到一条错误消息“ArrayList
”。
这是我的代码:
ArrayList resources = new ArrayList();
resources.add("Brick");
resources.add("Brick");
resources.add("Brick");
resources.add("Wool");
resources.add("Wool");
resources.add("Wool");
resources.add("Wool");
resources.add("Lumber");
resources.add("Lumber");
resources.add("Lumber");
resources.add("Lumber");
resources.add("Stone");
resources.add("Stone");
resources.add("Stone");
resources.add("Wheat");
resources.add("Wheat");
resources.add("Wheat");
resources.add("Wheat");
resources.add("Wasteland");
long seed = System.nanoTime();
Collections.shuffle(resources, new Random(seed));
for(int i = 0; i < resources.size(); i++){
String randomResource = resources.get(i);
}
答案 0 :(得分:3)
您声明resources
属于ArrayList
类型,这是一种原始类型,因此resources.get(i)
会返回类型Object
的实例,该实例无法分配给{ {1}}变量。
要让String
返回resources.get(i)
,请将其类型更改为String
。
答案 1 :(得分:0)
您应该使用泛型进行正确的类型解析:
ArrayList<String> resources = new ArrayList<String>();
你在代码中创建了一个Object列表。
此外,您可以将类强制转换为resource.get
行,
String randomResource = (String)resources.get(i);
但是在这种情况下,如果有人将不同的对象传递到您的列表中,您可以在运行时获得ClassCastException
。
例如:
ArrayList resources = new ArrayList();
resources.add(1); <-- this is also allowed because Integer is instance of Object
for(int i = 0; i < resources.size(); i++){
String randomResource = (String)resources.get(i); <-- ClassCastException because Integer isn't instance of String
}
有关java中泛型的更多信息:Java Generics FAQs