当集合中存储的对象很多,类型很多,就容易出现问题
coll.add("abcd2");
coll.add(5);//存储字符串和整数
for(Iterator i = coll.iterator();i.hasNext();){
String s= (String)i.next();
System.out.println(s.length());//要获取字符串的长度
}
运行时会发生异常:java.lang.ClassCastException: java.base/java.lang.Integer cannot be cast to java.base/java.lang.String
整型无法转化成字符串类型!
解决方案:不会出现这种因为储存不同类型而出现的问题
1.主观不存入不同类型的元素————程序做出来是给别人用的,不太可能
2.将在运行时会产生的异常(错误提示),放到编译的时候,将问题在源头暴露
思考:为什么数组没有问题
int[] arr = new int[4];
arr[0] = 5;
arr[0]=5.23;//在编译时就会出错
因为数组在输入的时候就已经明确了储存元素的类型
为了让集合使用的更加安全:
问题:集合可以存储任何类型的元素 ,导致获取时,如果出现强制转换就会引发运行异常:ClassCastException
解决办法:在添加元素时,就元素的类型 <元素类型>输入不符的元素时,编译就无法通过。
**List<String> list =new ArrayList<String>();**
list.add("hdiehd");
list.add(5);//编译时就会出错
JDK1.5 以后,就出现了这种解决机制,使用容器是,必须要明确容器中元素的类型
这种机制————泛型
1.这是一种安全机制
2.将运行时出现的问题,转移到了编译时期
3.泛型技术是给遍历器使用的方法,在编译时,让编译器带着类型的规定去检查你的代码
4.泛型的出现避免了强转的麻烦
for(Iterator<String> i = coll.iterator();i.hasNext();){
String str = i.next();
System.out.println(str.length());
}
当添加的元素类型确定时,迭代器中的元素类型就确定了,在迭代器使用元素的特有方法时就可以不使用强转