java泛型用基础类型_JAVA泛型基础及实战

概念

用于编译期检查,编译时发现类型不一致就会报错,运行时会自动擦除泛型信息。

用字母代替类型,相当于类型的变量。实际使用的时候必须对类型变量赋值才能使用。

1、方法上使用

用<>把类型变量写在方法声明上,然后方法的返回值、参数、方法里面都可以使用该类型变量,变量的类型在传递实参的时候自动赋值成实参的类型。如:

4d5ccd8197a78621babf0bfbb19b1f90.png

在f方法定义了T、S、U三个类型变量,方法返回值是U,参数是T和S

f("kkk", new Object())调用是自动将T赋值成了java.lang.String,S赋值成了java.lang.Object

一般来说方法返回值不会是一个单独的类型,而是跟参数类型一样,这样调用者才能决定返回参数的类型。这里的U只是举例用。

2、类上使用

用<>把类型变量写在类名后面,然后类里面的成员变量、方法、参数等都可以使用(静态方法和成员变量不能使用),如:

cf0308a8c81f499e4811aed1031b6163.png

这里List也使用了传入的T类型,相当于将泛型类型进行了传递,从一个类传到另一个类。

继承类的时候也可以对泛型赋值,如:

f086062a218085aaec34a95d1270b695.png

ps:即使实参有继承关系,泛型类的对象也不能赋值如List list = new arrayList();是错误的,虽然Integer是Object的子类。

通配符

声明一个有泛型类的变量实例时,可以用?代替具体的实参,如:

List> list;

a17d2fd5e0fdcc8d047fc2c97bdfdc3a.png

不过创建对象的时候,还是必须写上具体类型,不能是new ArrayList>()等。

?可以表示任何一种类型,因此List、List都可以赋值给List>

这通常用在参数类型是一个泛型类的方法上,如:

f(List> list) {}

这样实参可以传入任何元素类型的List对象。

extends和super限制实参类型

可用在?的后面,如:

9b26574331f2fd7020d17d8d85d8cdc1.png

extends Number>表示实参只能是Number的子类,

super Integer>表示实参只能是Integer的父类。

extends还可以用在类或者方法的泛型定义上,而super却不能。

如:

b95d0228a36aed9bf6e64a245dcafe16.png

ps:没有泛型数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值