泛型(一)(浅层介绍---好处)

泛型技术的由来:

集合中可以存储任意类型对象,但是在取出时,如果要使用具体对象的特有方法时,需要进行向下转型,如果存储的对象类型不一致,在转型过程中就会出现ClassCastException异常。这样就给程序带来了不安全性

在jdk1.5以后就有了解决方案——泛型技术:在存储元素时,就不允许存储不同类型的元素。存储了就编译失败。 所以就需要在存储元素时,在容器上明确具体的元素类型,这其实和数组定义很像。


好处:

1)将运行时期的ClassCastException异常转移到了编译时期,进行检查,并以编译失败来体现。 这样有利于程序员尽早解决问题

2)避免了向下转型(强转)的麻烦。


什么时候写泛型呢?

只要在使用类或者接口时,该类或者接口在api文档描述时都带着<>,就需要在使用时定义泛型。 

其实,泛型无非就是通过<>定义了一个形式参数,专门用于接收具体的引用类型。在使用时,一定要传递对应的实际参数类型

集合中泛型的应用特别多见。


泛型的擦除:

泛型技术是用于编译时期的技术,编译器会按照<>中的指定类型对元素进行检查,检查不匹配,就编译失败,匹配,就编译通过,通过后,生产的class文件中是没有泛型的,这就成为泛型的擦除


泛型的补偿:

运行时,可以根据具体的元素对象获取其具体的类型,并用该类型对元素进行自动转换


//演示泛型的好处之一:没采用泛弄,对元素的处理不安全。泛型可以把运行期的错误提前到编译期
	public static void t1(){
		//List list = new ArrayList();//无泛型
		List<String> list = new ArrayList<String>();//无泛型
		list.add("aaaqqqq");
		list.add("abaqqqq");
		list.add("cccqqqq");
		//list.add(100); //无泛型时,此处不会报错,但有泛型时会报错。
		Iterator it = list.iterator();
		while(it.hasNext()){
			Object obj = it.next();
			String str = (String)obj;
			str = str.substring(1, 4);
			System.out.println(str);
		}
	}
	
	//演示泛型的好处之二:从集合中读取的数据不需要强转,能够自动识别
	public static void t2(){
		//List list = new ArrayList();//无泛型
				List<String> list = new ArrayList<String>();
				list.add("aaaqqqq");
				list.add("abaqqqq");
				list.add("cccqqqq");
				Iterator<String> it = list.iterator();
				while(it.hasNext()){
					//String str =(String) it.next();//无泛型,必须强转
					String str = it.next();//List有泛型,并且Iterator也加泛型,那么这里就不用强转.
					str = str.substring(2);
					System.out.println(str);
				}
				System.out.println("------------");
				
				for(Object obj:list){
					System.out.println(obj);
				}
				
				//※泛型的好处之二:从集合中读取的数据不需要强转,能够自动识别
				for(String str:list){
					System.out.println(str);
				}
	}
自己可以定义一个加泛型的类

public class MySet<E> {}此时该类能接受指定的类型,E 形式类参数
public boolean add(E obj){}可以将E当做类型来用作参数,也可以当返回值
注意:不可new E,只是类的泛型参数。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值