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

list.add(2);

list.add(“String”);

System.out.println(list);

List lt1 = new ArrayList<>();

List lt2 = new ArrayList<>();

复制代码

image.png

观察这样一段代码,我们会发现当使用Arraylist实现List接口的时候,我们并没有定义数据类型,list同时能够存Integer和String类型的数据。并且在我们定义了lt1和lt2的时候分别指明了Integer和String数据类型,同样也是可行的。那么我们就会发现List接口在定义的时候应该并不是指定了一个确定的数据类型,在查看源码的时候我们就能够发现List接口定义了泛型,这时候我们回忆起在使用HashMap的时候同样也是需要根据需要定义数据类型,再去查阅HashMap源码,果不其然:

image.png

那么这个时候我们多少也能够理解泛型的作用了,下面来看泛型定义:因为集合存放的数据类型不固定,故往集合里面存放元素时,存在安全隐患?如果在定义集合时,可以想定义数组一样指定数据类型,那么就可以解决该类安全问题。JDK1.5后出现了泛型,用于解决集合框架的安全问题。泛型是一个类型安全机制。

二、如何自己来写一个自定义泛型类(接口)?


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;

}

}

复制代码

调用:

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值