JAVA泛型的定义理解以及类型形参的上限

class Foo {

private T data;

public Foo(T data) {

this.data = data;

}

public T getData() {

return data;

}

}

复制代码

简单实现:

image.png

需要注意的是:

1.允许在定义接口、类、方法时声明类型形参,该类型形参可以在整个接口、类、方法中当成普通类型使用;

2.类型形参将在声明变量、创建对象、调用方法时动态地指定,即传入实际的类型参数(可称作类型实参)。

在实例化的时候,如果不声明数据类型,那么默认是Object类型。

三、泛型类的子类(接口)


在定义泛型类的子类的时候我们肯定需要extends关键字,那么这时候我们需要写Foo还是Foo这样的形式呢?

1.为泛型类定义子类时,不能在父类上包含类型形参,但可以包含类型实参。

2.因为这种情况下,不是在定义父类,而是在使用父类,使用时需传入实参。

因为我们在这样的场景下我们子类extends父类,在使用父类的时候我们需要传的是实参,而不是形参,在定义的时候我们定义形参,但是在使用的时候我们需要传入的是实参。

四、泛型定义类型形参的上限


我们在定义的时候,如果限定的数据类型不是Object,而是数字,那么这时候就可以定义类型形参的上限定义为Number:class Foo {}。

那么这时候细心的小伙伴就会发现,那我为什么不在定义泛型类的时候就把泛型换成Number呢?那么我们看下面的代码

定义Firse类,直接指定Number作为形参:

class First {

private Number data;

public First(Number data) {

this.data = data;

}

public Number getData() {

return data;

}

}

复制代码

调用:

image.png

???first1理所应当没有问题,但是first2为什么也没有问题呢?

这时候我们我鼠标放到泛型类的Number上会发现一些端倪:

image.png

我们再看看一般的Number对象:

image.png

正常的Number是在lang包下的,而First类里面的形参,只不过是叫做Number的泛型而已。(恍然大悟)

最后就是测试正常定义泛型的上限:

class Second {

private T data;

public Second(T data) {

this.data = data;

}

public T getData() {

最后

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档

MySQL全家桶笔记

还有更多面试复习笔记分享如下

Java架构专题面试复习

了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB
或PDF文档

[外链图片转存中…(img-q6DMdoDu-1724495697384)]

还有更多面试复习笔记分享如下

[外链图片转存中…(img-DcGY6QL8-1724495697385)]

了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值