这两天一直在学习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()); } } }
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、避免了向下转型的麻烦!