/**
* 泛型的概述
*【目标:泛型的由来和基本使用】
1,因为集合可以存储的对象类型是任意的,在取出进行向下转型时,容易发生ClassCastException。
所以JDK1.5以后就有了解决这个问题的技术:泛型。
2,泛型的原理:其实就是在操作的元素类型不确定时,通过传递参数的形式来明确类型。
3,泛型的体现就是 <参数类型变量>用于接收具体的实际元素类型。
4,泛型技术在集合框架中应用非常广泛,只要记住:在使用类或者接口时,如果接口上有明确<>泛型。
在使用时,就传递所需的数据类型即可。不传递会出现警告类型不安全提示。
5,了解:泛型技术是用在编译器部分的技术,一旦类型检查正确,
生成的class文件中就没有泛型标记了:这是的泛型的擦除。
6,泛型的好处:
6.1 将运行时期的ClassCastException异常转移到编译时期通过编译失败体现。
6.2 避免了强制转换的麻烦。
7,其实泛型的使用就是往定义了泛型的类或者接口的<>中传递类型参数。
【学习结果】
1,表述出泛型技术的特点和好处。
2,泛型在集合对象中的使用,要求写集合代码时必须加入泛型。★★★★★
*/
public class GenericDemo { public static void main(String[] args) { //学习泛型之后的正确的做法,加入泛型 List<String> list = new ArrayList<String>(); list.add("abc"); list.add("ab是啊c"); list.add("ab是c"); // list.add(6); 编译报错,这就是泛型的好处体现之一, //将运行时期的ClassCastException异常转移到编译时期通过编译失败体现。 /*List list = new ArrayList(); 实验完毕注释掉 list.add("string"); 实验完毕注释掉 list.add("5"); 实验完毕注释掉 list.add(6); //发现问题: 编译并不报错 */ /*我们遍历一下集合,看看有没有其他问题*/ for(Iterator<String> it = list.iterator();it.hasNext();){ // Object obj = it.next(); 实验完毕注释掉 // System.out.println(obj); 实验完毕注释掉 /* 打印结果也并无异常 string 5 6 * */ /*为什么没问题呢?因为System.out.println(obj.toString()),调用了toString方法*/ /*那么现在,需求改变,需要打印字符串长度,做法如下*/ String str = /*(String)*/ it.next(); //字符串长度是String的特有方法,强转是必然的 /*注意: 定义了泛型,自然不需要强转了 *这也是泛型好处的另一种体现:避免了强转的麻烦!*/ System.out.println(str.length());//思考:此时再输出会怎么样? /* java.lang.ClassCastException: java.lang. * Integer cannot be cast to java.lang.String * 异常: 类型不能转换异常. * 集合中存储元素时,如果存的对象很多,而且对象类型不相同,会出现安全隐患. * */ } } }
时间: 2024-10-14 05:56:19