欢迎来到天天文库
浏览记录
ID:62303068
大小:134.81 KB
页数:8页
时间:2021-04-26
《Java泛型解析(01):认识泛型.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、优选Java泛型解析(01):认识泛型What Java从1.0版本到现在的8,中间Java5中发生了一个很重要的变化,那就是泛型机制的引入。Java5引入了泛型,主要还是为了满足在1999年指定的最早Java规X之一。经过了5年左右的时间,专家组定义了一套泛型规X,实现后通过测试投入到使用。所以说泛型是Java5以后才有的,欲知详情,继续往下看。Why 换个角度想,Java5引入泛型,必定是它能带来好处,否则牛气的Java专家工程师就要遭到吐槽了。我们来吐槽一下没有泛型的程序是怎么写的。[code01][java]viewplaincopypr
2、int?1.ArrayList al = new ArrayList(); 2.al.add("ysjian001"); 3.al.add(1); 4.al.add(new Object()); ArrayListal=newArrayList();al.add("ysjian001");al.add(1);al.add(newObject()); 这段代码看似功能强大,为什么呢?因为它似乎能够往集合添加各种类型的对象(int类型会被装箱成Integer对象类型),貌似一些老程序员也倾向于这么去做,而且他们可以理直气壮的告诉我理由:我这
3、么做想存什么就存什么!先不否定这种说法,让我们继续,看看下面代码。[code02]8/8优选[java]viewplaincopyprint?1.// 获取值的时候必须进行强制转换,然后调用对应对象的方法 2.String first = (String) al.get(0); //获取值的时候必须进行强制转换,然后调用对应对象的方法Stringfirst=(String)al.get(0); 往集合里面存值就是为了后期取出来用的,而不是System.out.println(first),这里就产生了一个强制转换的问题,而往往这种类型的强制转换在编译
4、器是允许通过的,而写程序的人们会犯下无意间的错误,错误的进行了强制转换,导致程序运行失败。 强制类型转换导致的程序运行失败的原因是没有在编译器对类型进行控制,看看code01调用ArrayList对象的add方法,任何类型都是可以添加进行的,编译器无法进行错误检验,埋下了安全隐患,例如:[code03][java]viewplaincopyprint?1.ArrayList al = new ArrayList(); 2.// 无法进行错误检查,File对象可以添加进去,编译器和运行期都可以通过 3.al.add(new File()); 4.
5、String first = (String) al.get(0); // 类型转换失败导致运行失败 ArrayListal=newArrayList();//无法进行错误检查,File对象可以添加进去,编译器和运行期都可以通过al.add(newFile());Stringfirst=(String)al.get(0);//类型转换失败导致运行失败没有泛型的程序面临两个问题: 1.编译器无法进行类型检查,可以向集合中添加任意类型的对象。 2.取值时类型转换失败导致程序运行失败。没有泛型的程序导致的后果: 8/8优选1.程序的可读性有所降低
6、,因为程序员可以不受限制往集合中添加任意对象。 2.程序的安全性遭到质疑,类型转换失败将导致程序运行失败。 Java5泛型提供了一个更好的解决方案:类型参数(typeparameters),使用泛型的程序改善上述代码如下:[code04][java]viewplaincopyprint?1.ArrayList al = new ArrayList(); 2.al.add( "ysjian001"); 3.// al.add(new Thread()); // 定义了String类型参数,添加File对象会报错
7、4.String first = al.get(0);// 使用泛型后取值不用进行类型转换 ArrayListal=newArrayList();al.add("ysjian001");//al.add(newThread());//定义了String类型参数,添加File对象会报错Stringfirst=al.get(0);//使用泛型后取值不用进行类型转换 问:到这里,通过前后对比,泛型的好处是不是很清楚了呢?为什么用泛型呢? 答:因为出现编译错误比类在运行时出现强制类型转换异常要好得多,泛型的好处在于提高了
8、程序的可读性和安全性,这也值程序设计的宗旨。Who 使用泛型类
此文档下载收益归作者所有