(70)泛型:好处、格式、字符串长度应用泛型后

来源:互联网 发布:西安黑马程序员 编辑:程序博客网 时间:2024/06/05 18:41

泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个安全机制
一、好处:
①将运行时期出现问题ClassCastException,转移到编译时期
方便程序员解决问题,让运行时的错误减少
②避免了强制转换的麻烦

二、格式
通过<>来定义要操作的引用数据类型

三、 在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,只要见到<>就要定义泛型
<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型,作为参数传递到<>中即可

下面对有泛型的好处代码解释:

public static void main(String[] args) {        // TODO Auto-generated method stub        ArrayList<String> al=new ArrayList<String>();//定义了一个容器,其数据类型为String        al.add("abc01");        al.add("abc009");        al.add("abc014");        al.add("abc000");        /*al.add(4);等价于al.add(new Integer(4));在没有定义泛型的时候,可以存入任意对象,所以编译不会出错         * 但是,当定义了泛型之后,若存入除String类型的元素,就会出现编译失败情况,提高了安全性         */        Iterator<String> it=al.iterator();//若不加String,则数据类型是Object,在while中必须进行强制类型转换                                         //加了String后,已经确定元素的数据类型为String了,所以不用强转了        while(it.hasNext()) {            String s=it.next();            System.out.println("s="+":"+s);        }   

对之前的需求:根据字符串长度来排序(若字符串长度相等,按自然顺序排序),加入泛型,使代码更简单
①Comparator接口
int compare(T o1, T o2)
要操作的对象是什么类型, 则T写什么类型,在实现的方法中也是什么类型,这个类型并不确定
类似
②ArrayList类
boolean add(E e)
要操作的元素,是什么类型,则E写什么类型,在对应的方法中也是什么类型,这个类型并不确定。
当类的元素类型确定后,就可以防止一些操作的不安全性,如add就可以在编译时,检查出是否存入的是指定的类型

import java.util.Comparator;public class StringCompare implements Comparator<String>{    public int compare(String o1,String o2) {        String str1=o1;        String str2=o2;        int num=str1.length()-str2.length();        if(num==0) {            return str1.compareTo(str2);        }        return num;    }}public class StringDemo {    public static void main(String[] args) {                TreeSet ts=new TreeSet(new StringCompare());                ts.add("lisi00");                ts.add("lisi001");                ts.add("lisi02");                ts.add("lisi0");                ts.add("lisi04");                Iterator it=ts.iterator();                while(it.hasNext()) {                    Object obj=it.next();                    String str=(String)obj;                    System.out.println(str);    }}}