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

泛型: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);

    }

}
}
posted @ 2017-07-17 11:43  测试开发分享站  阅读(104)  评论(0编辑  收藏  举报