java泛型的理解

1、泛型概述

       泛型主要是 Java SE 1.5 的新特性,泛型的本质就是参数化类型,什么是参数化类型呢?就是所操作的数据类型被指定为一个参数,这种参数可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。那就得思考如果没有泛型的时候,为了达到泛型效果是如何做的呢?

2. 泛型的意义

a.可以对类型进行自动检查

      注意:不是替换 仅仅是用来进行类型安全检查!!!!!!

b.自动对类型进行类型转换

3. 泛型的定义

       泛型类:一般用于封装非特定数据类型的操作,操作执行的大体相同,与所存储的数据类型无关。泛型类的声明与一般类的声明语法一致,但需要在生命的泛型接口名称后使用”<>”,制定类型参数;

参数化类型:T  或者  E

class 类名< >{ }

类名< >  对象名 = new 类名<>();

4、泛型坑

① 不能直接 new 泛型数组

      <T extends Comparable> 

T类型擦除到Comparable

  element = new T[2];       //错误

element = (T[])new Comparable[Constant.INITSIZE];      //正确

element =(T[]) Array.newInstance(Comparable.class,2);  //正确

②不能定义泛型对象的数组

③不能产生泛型类型对象

④在 static 方法中,是不能用泛型类型参数的。因为 static 方法是不依赖对象存在的,所以无法推知static 泛型参数类型。

⑤泛型参数类型不能是基本数据类型必须是引用数据类型。

5、泛型接口

       在泛型类的设计中,通常把泛型类共同要实现的方法的签名封装为泛型接口,然后在实现这些接口的泛型类中实现这些方法。泛型接口的声明语法和一般接口的声明语法一致,但需要在声明泛型的接口名称后加“<>”指定一个或者多个类型参数。

6、泛型方法

       我们再次之前看到的泛型都是应用在整个类上,但同样可以包含参数化方法,而这个方法所在的类可以是泛型类也可以不是泛型类。也就是说,是否拥有泛型方法与其所处的类是否是泛型类毫无关系。方法中,通过指定类型参数,可以声明泛型方法,从而提高其可复用性。泛型方法的参数化类型列表放在方法类符的后面返回值之前。

使用泛型方法需要注意的点:

(1)如果泛型方法的泛型参数与类型的泛型参数相同,编译器生成警告,因为方法的泛型参数隐藏了外部类型的泛型参数

                                      

(2)直接可以通过”方法名()”的形式进行泛型方法的调用,编译器根据传入的方法实参推衍出类型形参。

(3)使用约束对泛型类型参数启到约束的作用。

              

7、泛型参数的约束

       默认情况下,没有约束条件的泛型类型参数(Sample<T>)T 称为未绑定类型参数,当创建未绑定类型参数的泛型类实例时,可以给参数类型指定任意类型。想要让泛型参数支持特定类型时,可以使用关键字 extends或者 super 关键字对泛型参数进行约束。

(1) extends 主要限定泛型参数的上界(常见的使用如下):

<T extends 基类>://T 只能是基类或者基类的派生类

<T extends 基接口>; //T 只能是实现基接口的派生类

8、通配符的使用

MyArrayList<?>  my = new MyArrayList<Integer>();

通配符的约束

                              

<? extends 基类> :其中表明?未知类型限定为指定类或者指定类的派生类。指定上界。

  <? extends Number>    Number以下可以看得见

<? super 派生类> :其中?未知类型限定为指定类或者指定类的基类。指定下界。

  <? super Number>    Number以上可以看得见

通配符的缺陷

MyArrayList<?>  my = new MyArrayList<Integer>();

My.add();       错误

改进

MyArrayList<?  extends Number>  my = new MyArrayList<Integer>();

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值