首页 > 代码库 > 泛型Java

泛型Java

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