泛型的概述

泛型的概述

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

举例说明:

import java.ytil.ArrayList;
import java.util.Iterator;

class test{
	public static void main(String[] args){
 	ArrayList a = new ArrayList();

	a.add("String");
	a.add(100);
	
	Iterator it =a.iterator();
	while(it.hasNext()){
		String s = (String)it.next();
		System.out.println(s);
		}
	}
} 

毫无疑问,运行不了,报错:ClassCastException
这是因为遍历的时候String s = (String)it.next();这时候我们以及限定了是String类型,但是我们集合里有Integer类型,所以会报错,但是这个报错却没有提前提示,为了解决这个问题,我们引用了泛型
泛型测试:

import java.ytil.ArrayList;
import java.util.Iterator;

class test{
	public static void main(String[] args){
 	ArrayList<String> a = new ArrayList<String>();

	a.add("String");
	//a.add(100);
	//这个就会直接报错
	Iterator<String> it =a.iterator();
	while(it.hasNext()){
	//前面以及明确了String,所以这里不用转型
		//String s = (String)it.next();
		String s = it.next();
		System.out.println(s);
		}
	}
} 

进一步测试

/**
 * 这是一个泛型类
 * 泛型类:把泛型定义在类上
 * @author 品茶的橘子
 * @version v1.0
 *
 */
public class ObjectTool<T> {
	private T obj;

	/**
	 * @return the obj
	 */
	public T getObj() {
		return obj;
	}

	/**
	 * @param obj the obj to set
	 */
	public void setObj(T obj) {
		this.obj = obj;
	}
}
/**
 * 这是泛型类的测试类
 * @author 品茶的橘子
 * @version v1.0
 * 
 */
public class ObjectToolDemo {
	public static void main(String[] args) {
		//创建集合对象
		ObjectTool<String> ob = new ObjectTool<String>();
		
		ob.setObj(new String("张三"));
		String s = ob.getObj();
		System.out.println("名字:"+ s);
		
		
		ObjectTool<Integer> ob2 = new ObjectTool<Integer>();
		ob2.setObj(new Integer(10));
		Integer i = ob2.getObj();
		System.out.println("年龄:"+ i);
		
		
//		ObjectTool ob = new ObjectTool();
//		
//		ob.setObj(new String("李四"));
//		String s = (String)ob.getObj();
//		System.out.println("名字:"+ s );
//		
//		ob.setObj(new Integer(10));
//		Integer i = (Integer)ob.getObj();
//		System.out.println("年龄:"+i);
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值