Java学习笔记29(集合框架三:泛型)

2018-01-13 07:55:47来源:cnblogs.com作者:一清人点击

分享
第七城市

泛型的概念:

简单地讲,就是同一个方法(类),可以接受不同的数据类型并运行得到相对应的结果,不会出现安全问题

上一篇有一段这样的代码:

没有定义集合类型、迭代器类型

package demo;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class CollectionDemo {    public static void main(String[] args) {        //集合可以存储任意类型的对象        //集合中,不指定存储的数据类型,也可以存储        Collection c1 = new ArrayList();        c1.add("abc");        c1.add("def");        Iterator it1 = c1.iterator();        while(it1.hasNext()){            //it.next获取Object类型,强制转换            String s1 = (String)it1.next();            System.out.println(s1.length());        }    }}

这里会有隐患:如果add(1);,自动装箱成Integer类型,无法转换成String,发生类型的转换异常

java中提出了泛型的概念,来解决这个问题:

package demo;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class GenericDemo {    public static void main(String[] args) {        function();    }        public static void function(){        Collection<String> c1 = new ArrayList<String>();        c1.add("abc");        c1.add("def");        Iterator<String> it1 = c1.iterator();        while(it1.hasNext()){            String s1 = it1.next();            System.out.println(s1);        }    }}

这时候如果add(1);,在编译的时候会无法通过,解决了安全问题

其实这里的泛型,是伪泛型,这里只是一个编译的手段,如果不是String类型,编译无法通过,否则编译成功

而编译后的class文件里面不存在泛型,但是由于编译过程中处理了类型问题,所以最后运行也是安全的

泛型的方法(了解即可,没有实际应用价值):

package demo;import java.util.ArrayList;public class GenericDemo {    public static void main(String[] args) {        ArrayList<Integer> array = new ArrayList<Integer>();        // ArrayList集合内有方法toArray泛型方法        array.add(123);        array.add(456);        Integer[] i = new Integer[(array.size())];        Integer[] j = array.toArray(i);        for (Integer k : j) {            System.out.println(k);        }    }}

同样存在泛型的接口,泛型类等,目的都是为了解决安全问题并且方便使用者,并且带来了增强for循环

泛型的通配符?:

package demo;import java.util.ArrayList;import java.util.Collection;import java.util.HashSet;import java.util.Iterator;public class GenericDemo {    public static void main(String[] args) {        ArrayList<String> array = new ArrayList<String>();         array.add("abc");        array.add("def");                HashSet<Integer> set = new HashSet<Integer>();        set.add(123);        set.add(456);                iterator(array);        iterator(set);    }    //要求定义一个方法,可以同时迭代两个集合    public static void iterator(Collection<?> c){        Iterator<?> it1 = c.iterator();        while(it1.hasNext()){            System.out.println(it1.next());        }    }}
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台