java之泛型

时间: 2014-12-22 20:56 栏目: JAVA 浏览: 3261 赞: 108 踩: 16 字体:

以下为本篇文章全部内容:

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。

    在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

        在Java 5之前,为了让类有通用性,往往将参数类型、返回类型设置为Object类型,当获取这些返回类型来使用时候,必须将其“强制”转换为原有的类型或者接口,然后才可以调用对象上的方法。强制类型转换很麻烦,我还要事先知道各个Object具体类型是什么,才能做出正确转换。否则,要是转换的类型不对,比如将“Hello Generics!”字符串强制转换为Double,那么编译的时候不会报错,可是运行的时候就挂了。那有没有不强制转换的办法----有,改用 Java5泛型来实现。

        泛型的声明:

                类型<泛型类型> 变量名  如:List<String> str;

                在声明类型后面跟上<类型>就是使用泛型了

        泛型注意事项:

                声明了泛型,子类继承对象实例

                泛型集合中限定类型,不能是基本数据类型,必须是引用数据类型

                如果要用基本数据类型可以通过使用包装类限定允许存入的基本数据类型

                如:int->Integer、long->Long、boolean->Boolean

下面让我们用代码来看看怎么声明一个泛型

代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

//创建一个类
public class Generics {
        //定义一个属性strList类型为List并且泛型为Integer的变量
	public List<Integer> strList;//这里的<Integer>就是泛型,值得注意的是这里是int->Integer
	
	//构造器实例化ArrayList给定义个变量
	public Generics(){
		this.strList = new ArrayList<Integer>();
	}
	
	//list的添加方法往定义的变量添加数据
	public void testAdd(){
	        //定义一个整型数组
		Integer[] s = {1,2,3,4,5,6}; 
		//序列化数组全部添加到list中
		strList.addAll(Arrays.asList(s));
		testForeach();//调用遍历方法
	}
	
	//使用foreach遍历添加的数据
	public void testForeach(){
	        for(Integer ss:strList){
		        //之前我们说遍历方法的时候需要强转的,这里使用了泛型之后取出来的数组就不再需要强转了    
            	        System.out.println(ss);
		}
	}
	
	public static void main(String[] args) {
		Generics t = new Generics();
		t.testAdd();
	}
}

由上面代码可见,泛型给我们带来了不少方便的地方,之前我们没学到泛型的时候,从list里面取出来的数据都需要强转一下,而我们使用了泛型之后,一切都变得简单起来了,现在我们都不需要强转直接就可以使用了。这是我个人感觉最方便的地方,而且自己强转的话,还得避免代码开头之前提到的问题。以上仅为个人笔记,感谢大家支持。请尊重作者原创,禁止采集。