语言: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);
//}
}
}