java范型使用说明

1. 范型类、接口

范型的定义语法
class 类名称 <范型标识,范型标识,…> {
private 范型标识 变量名;

}

范型可看成是 类型的形参,实例化类的时候来指定具体的类型,
可定义为 成员变量类型,方法参数类型,方法返回值类型
由外部使用类的时候来指定(new对象 或 子类继承时指定具体类型)
在这里插入图片描述

使用时语法:
类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>() ;
在这里插入图片描述
只定义了一个范型类,但多个地方代码复用
范型不支持基本数据类型,只支持类类型,
同一范型类,根据不同的数据类型创建的对象,本质上是同一类型

  • 从范型类派生子类
    子类也是范型类,子类和父类的范型类型要一致。即使子类范型扩展,也要有一个范型和父类一致
    class ChildGeneric< T > extends Generic< T > {
    }
    子类不是范型类,父类要明确范型的数据类型
    class ChildGeneric extends Generic< String > {
    }
    在这里插入图片描述
  • 范型接口
    定义语法
    interface 接口名称<范型名称,范型名称,…> {
    范型标识 方法名();

    }
    实现类不是范型类,其实现的接口要明确数据类型;
    实现类也是范型类,实现类和接口的范型类型要一致

2. 范型方法

在调用方法的时候指明范型的具体类型
语法:
修饰符<T, E, … > 返回值类型 方法名(形参列表){
方法体
}
在这里插入图片描述
范型方法中的范型是独立存在的,
即使范型类中定义的和范型方法中一致,两者也没任何关系,
类成员中的T 和 范型方法中的T 可同时存在,但不是同一个,
普通方法中用到了范型的成员,并不是范型方法

支持可变参数的范型方法
范型方法能使方法独立于类而产生变化,
如果static 方法要使用范型能力,就必须使其成为范型方法

3. 类型通配符

类型通配符一般是使用“ ?” 代替具体的类型实参,
所以类型通配符是类型实参,而不是类型形参
在这里插入图片描述

优化:限制的是调用时的实参类型

  • 类型通配符上限
    语法:
    类/接口<? extends 实参类型>
    要求该范型的类型,只能是实参类型,或实参类型的子类类型
    通配符上限是不允许填充元素的

在这里插入图片描述

  • 类型通配符下限
    类/接口 <? super 实参类型>
    要求该范型的类型,只能是实参类型,或实参类型的父类类型

在这里插入图片描述

4. 类型擦除(编译后)

  • 无限制类型擦除
    在这里插入图片描述
  • 有限制类型擦除(上限,下限)
    在这里插入图片描述
  • 桥接方法
    在这里插入图片描述

5. 范型数组实现(不推荐用 范型数组)

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值