语言:Java
编译器版本:1.6
在下面的代码中,我尝试执行以下操作:
- 创建一个
List<String> - 添加一个
String - 分配
List<String>给原始List - 创建一个
List<Integer> - 将原始分配
List给List<Integer> - 添加一个
Integer get()使用@indexes 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);
//}
}
}