为什么我的ArrayList项目被转换为Java中的对象?

时间:2017-01-18 09:35:19

标签: java arraylist collections

我正试图通过它的位置从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);
}

2 个答案:

答案 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