2017-01-18 4 views
1

私はArrayListから要素を取得しようとしています。 ArrayList要素を取得する行に "Object cannot be converted to a string"というエラーメッセージが表示され続けます。ここでArrayList項目がJavaのオブジェクトに変換されるのはなぜですか?

が私のコードです:

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

使用 'ArrayListの'。 – Eran

+0

それはトリックでした!これで回答を投稿すると、私はそれを受け入れます。 – ShoeLace1291

答えて

3

あなたは、生タイプであるタイプArrayList、であるとresourcesを宣言し、そうresources.get(i)String変数に割り当てることができないタイプObjectのインスタンスを返します。

resources.get(i)Stringに返すには、そのタイプをArrayList<String>に変更してください。

0

あなたは解決する適切なタイプのためにジェネリック医薬品を使用する必要があります:あなたは、オブジェクトのリストを作成したあなたのコードで

ArrayList<String> resources = new ArrayList<String>(); 

また、あなたは、resource.getラインにクラスのキャストを置くことができます

String randomResource = (String)resources.get(i); 

誰かがあなたのリストの中に別のオブジェクトを渡した場合、この場合には、あなたは、実行時にClassCastExceptionを得ることができます。例えば

:Javaでジェネリック医薬品について

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 Generics FAQs

関連する問題