言語:Java
コンパイラバージョン:1.6
以下のコードでは、次のことを実行しようとしています。
- 作成する
List<String>
- 追加する
String
List<String>
生に割り当てるList
- 作成する
List<Integer>
List
生を割り当てるList<Integer>
- 追加します
Integer
get()
@インデックス1および2を使用して値を取得し、それらを出力します。
すべてのステートメントは(警告付きで)コンパイルされており、正常に実行されます。
しかし、ループをList<Integer>
使用してループしようとするとfor
、が取得されClassCastException
ます。list.get()
なぜメソッドを使用できるのに、反復できないのか疑問に思っています。
出力:( コメントなしのforループで実行した場合)abcd 200
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at genericsamples.CheckRawTypeAdd.main(CheckRawTypeAdd.java:26)
これが私のコードです
import java.util.*;
import java.io.*;
class CheckRawTypeAdd
{
public static void main(String[] sr)
{
List<String> list_str = new ArrayList<String>();
list_str.add("abcd");
List<Integer> list_int = new ArrayList<Integer>();
List list_raw;
list_raw=list_str;
list_int=list_raw;
list_int.add(200);
Object o1 = list_int.get(0);
Object o2 = list_int.get(1);
System.out.println(o1);
System.out.println(o2);
//for(Object o : list_int)
//{
// System.out.println("o value is"+o);
//}
}
}