码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA泛型学习

时间:2015-06-08 15:10:44      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:java泛型学习

JAVA泛型学习

   泛型是JAVA在JDK1.5提出的新特性,主要是为了代码的安全性和代码的重复利用。

    

    安全性:在没有提出泛型时,主要是通过传递Object来实现传入类型的引用,然后在取得数据时进行强制类型转换,但是这样会存在一个问题,就是比如一个集合中存入了A类型的数据,然后遍历集合获取A类型的数据时,需要(A)Object来强制转换,如果集合中也存入了一个B类型的数据,那么在编译期间不会报问题,运行时就会出现问题,因为无法将一个B类型的数据转换为A类型的数据,也就是类型转换异常。为了解决这个问题,提出了泛型的概念。这样就可以在将B存入集合前就进行限定,并且在取数据时,无需强制类型转换,减少了代码的运行异常错误。

    我们知道数组是相同数据类型的一个集合,缺点就是数组的容量是固定的,无法动态的扩展。如果集合对放入其中的对象类型做一个限定,也就可以看成为一个相同对象类型且能动态扩展容量的对象“数组”(集合)。这样我们在存入数据和取出数据时,都能知道数据的类型,泛型就是提供这种想法的功能实现。


    代码重复利用:也有解释为动态功能,即能根据运行时传递的类型来自动匹配.

     1) 泛型类

    public  class Demo<E>{

        private E e;

        Demo(E e){

            this.e=e;

        }    

        public E getE(){

            return e;

        } 

    }

    String b="hello";

    Demo demo=new Demo(String b);

    String a=demo.getE();

    

    Demo demo1=new Demo(30);//这里不是基本类型,而是自动封装为Integer对象传递。

    Integer iter=demo1.getE();

    

    从上面可以看出,通过传递不同的引用类型给类,即可得到对应的引用类型对象。

    2)泛型方法(泛型方法与泛型类没有必然的关系,可以是普通类,但是类中方法为泛型方法)

    public class Test{

    public <E> void demo(E e){ 

            System.out.println(E.class.getName()); //输出class对象的名称

        }

    

    public <E> E demo1(E e){

        ....

        return e;

        }

    

    }

    

    3)泛型接口

    public interface Test<E>{

        .....

    }

    4)通配符 ?   如果不对?进行类型的限定,则可以传递Object或者其子类进入.(任意类都可以)

     ? extends E:代表只能传递进入E或者E的子类。

     ?  super  E:代表只能传递E或者E的父类。

     5)多重泛型

     ? extends E & interface名 & interface名1 ..... 代表E及其子类并实现了后面的接口的类。


   

JAVA泛型学习

标签:java泛型学习

原文地址:http://20150523.blog.51cto.com/10261028/1659615

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!