Java中泛型(1)——泛型介绍(传智播客毕老师视频讲解)

来源:互联网 发布:雄3导弹知乎 编辑:程序博客网 时间:2024/05/17 23:53
泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制

1、泛型概述
好处

1.将运行时期出现问题ClassCastException,转移到了编译时期。方便于程序员解决问题。让运行时问题减少,安全。

2,避免了强制转换麻烦。

泛型格式:通过<>来定义要操作的引用数据类型。

在使用java提供的对象时,什么时候写泛型呢?

通常在集合框架中很常见,只要见到<>就要定义泛型。其实<> 就是用来接收类型的。

使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。

比如代码;

import java.util.*;public class GenericDemo {public static void main(String[] args) {ArrayList L=new ArrayList();L.add("001");L.add("002");L.add("003");L.add("004");L.add(005);ListIterator it=L.listIterator();while(it.hasNext()){String s=(String)it.next();System.out.println(s+"...."+s.length());}}}
结果如下:


发现报错了,因为集合可以存储各种类型的对象,因此在使用时,可以存入005,并由于自动装箱,将其作为new Integer(005)存入L集合中,但是在迭代取的过程中,Integer类型的对象不能够自动转换至String类型的对象,所以在编译时通过,但是发生运行时异常报错。


为了能够使这种错误在编译时就明朗,解决这种安全问题,应用泛型!

代码如下:


可见此程序在规定泛型后,写入L.add(005)时在编译过程中就提示有错误了!而在ListIterator后定义迭代器接收类型后,在Sting s=it.next();都不用进行强制类型转换了!


2、泛型应用

在比较器中应用泛型,



可以看出,在创建比较器时,可以定义泛型,即指定类型进行比较:

代码如下

import java.util.Comparator;import java.util.Iterator;import java.util.TreeSet;public class LenComparator implements Comparator<String>{//按照字符串长度比较,若字符串长度相同,再按照字符串的自然顺序比较public int compare(String  obj1,String obj2){String s1=obj1;String s2=obj2;int i=new Integer(s1.length()).compareTo(new Integer(s2.length()));if(i>0)return 1;else if(i==0)return s1.compareTo(s2);elsereturn -1;}}public class generic01 {public static void main(String[] args){TreeSet<String> T=new TreeSet<String>(new LenComparator());T.add("001");T.add("0002");T.add("00005");T.add("004");T.add("0003");Iterator<String> it=T.iterator();while(it.hasNext()){System.out.println(".."+it.next());}}}
结果如下:


并且由于定义了比较器泛型,在程序编译中不会有警告提示,保证了程序的安全性;同时在比较器中,避免了类型强制转换!




0 0