泛型的认识

            泛型(generic)  是指参数化类型的能力。可以定义带泛型类型的类或方法,随后编译器会用具体的类型来替代它。例如,可以定义一个泛型栈类,它存储的是泛型元素。可以从这个泛型类生成一个包含字符串的栈对象和一个包含数字的栈对象。这里,字符串和数字都是替换泛型的具体类型。

          使用泛型的主要优点:能够在编译时而不是在运行时检测出错误。泛型类或方法允许用户指定可以和这些类或方法一起工作的对象类型。如果视图使用一个不相容的对象,编译器就会检测出这个错误。

         从JDK1.5开始,Java允许定义泛型类泛型接口泛型方法。可以使用泛型对Java API中的一些接口和类进行修改

  JDK1.5之前,java.lang.Comparable接口被定义为:

                                                                    package java.lang;

                                                                    public interface Comparable{

                                                                        public int compareTo(Object o)

                                                                    }

        JDK 1.5 之后,被修改为:

                                            package java.lang;

                                            public interface Comparable<T>{

                                                public int compareTo(T o)

                                            }

  

       这里的<T> 表示形式泛型类型,随后可以用一个实际具体类型来替换它。替换泛型类型称泛型实例化。按照惯例,像E或T这样的单个大写字母用于表示一个形式泛型类型。



    举例:给出ArrayList类在JDK1.5之前和从JDK1.5开始的类图

                          Java.util.ArrayList

                 +ArrayList()

                 +add(o:Object):void

                 +add(index:int,o:Object):void

                 +clear():void

                 +contains(o:Object):boolean

                 +get(index:int):Object

                 +indexOf(o:Object) :int

                 +isEmpty():boolean

                 +lastIndexOf(o:Object):int

                 +remove(o:Object):boolean

                 +size():int

                 +remove(index:int):boolean

                 +set(index:int,o:Object) :Object

 

                JDK 1.5之后

                

                 +ArrayList()

                 +add(o:E):void

                 +add(index:int,o:E):void

                 +clear():void

                 +contains(o:Object):boolean

                 +get(index:int):Object

                 +indexOf(o:Object) :int

                 +isEmpty():boolean

                 +lastIndexOf(o:Object):int

                 +remove(o:Object):boolean

                 +size():int

                 +remove(index:int):boolean

                 +set(index:int,o:E) :Object



例:    ArrayList<String> list = new ArrayList<String>()

现在,就只能向该线性表中添加字符串。

 list.add("red");

如果视图向其中添加非字符串,就会产生编译错误。

list.add("white");

String s = list.get(0);

在JDK1.5之前,由于没有使用泛型,所以必须把返回值的类型转换成String,如下所示:

String s = (String)(list.get(0));

如果元素是包装类型,例如,Integer、Double、Character,那么可以直接将这个元素赋值给一个基本类型的变量。这个过程称为自动解包

例:

ArrayList<Double> list = new ArrayList<Double>();

list.add(5.5);

list.add(3.0);

Double doubleObject = list.get(0);

double  d = list.get(1);

++++++++++++++5.5和3.0自动转换为Double对象,并添加到list中。list中的第一个元素被赋给一个Double变量。在此无需类型转换,因为list被申明为Double对象。list中的第二个元素被赋给一个double变量。list.get(1)中的对象自动转换为一个基本类型的值。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值