java 集合14 泛型概述

当集合中存储的对象很多,类型很多,就容易出现问题

这里写图片描述

 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());
        }

当添加的元素类型确定时,迭代器中的元素类型就确定了,在迭代器使用元素的特有方法时就可以不使用强转

猜你喜欢

转载自blog.csdn.net/Stitch__/article/details/82528879
今日推荐