泛型Java

来源:互联网 发布:macd指标源码 编辑:程序博客网 时间:2024/06/05 06:53

这两天一直在学习Java中的泛型,发现泛型的出现帮我们苦逼程序猿解决了许多潜在的问题,并为我们程序猿编程减轻了工作量。

下面把我的心得体会与大家共享一下(尽管只是些皮毛大笑):

泛型技术的由来:在集合中可以存储任意的对象,但是在取出时,如果要使用具体对象的特有方法时,需要进行向下转型,如果存储的对象类型不一致,在转型的过程中,就会出现ClassCastException异常。看下面一个例子:

package cn.itcast.generic.demo;import java.util.ArrayList;import java.util.Iterator;public class GenericDemo {public static void main(String[] args) {ArrayList al= new ArrayList();al.add("abc1");   // Ctrl+Alt+↓ 复制当前行到下一行al.add("faougoa");al.add("ajsogiwewet");Iterator it=al.iterator();while(it.hasNext()){String s=(String)it.next();System.out.println(s.length());}}}


在上面的例子中,al对象中第一次存储了一个String类型值,接下来还继续存储String类型的值,那么,编译和运行都是没有问题的,但是如果说,我不小心存储了一个Integer类型的值呢?

package cn.itcast.generic.demo;import java.util.ArrayList;import java.util.Iterator;public class GenericDemo {public static void main(String[] args) {ArrayList al= new ArrayList();al.add("abc1");   // Ctrl+Alt+↓ 复制当前行到下一行al.add("faougoa");                al.add(6);      // 整数类型的值,将会出现类型转换异常al.add("ajsogiwewet");Iterator it=al.iterator();while(it.hasNext()){String s=(String)it.next();System.out.println(s.length());}}}
大家可以在MyEclipse上试一下,编译的时候,不会出错,但是在运行的时候,会抛出异常:



为什么会出现这种情况呢?出现这种情况该怎么解决呢?

出现这种情况的原因就是存储的对象类型不一致(String类型和Integer类型不一致)。解决办法就是使用泛型!


这种情况下,我们会提前得到错误提示,能快速的知道程序中出错的地方,并能及时加以修改!

总结:使用泛型的好处

           1、泛型是一种安全机制,提高程序安全性。

           2、将运行时期的ClassCastException异常转移到了编译上来,进行检查,并以编译失败的形式提示程序员。有利于程序员尽早解决问题。

           3、避免了向下转型的麻烦!




0 0
原创粉丝点击