Java泛型总结
为什么会有泛型?泛型是用来干什么的?
泛型其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
类型的参数化,我们学过java中的方法,在java的方法中,我们可以定义一个形参,让后在调用方法时给他传入一个实参。泛型就是让类型像参数那样传递。
如果没有泛型的话,这些容器在设计的时候只能默认设计成装Object类型对象。因为Java里Object是根类。代码如下:
但是这样设计的话会出现两个问题:
1、可能编译时会通过,但是运行时会异常。出现ClassCastException异常。
2、类型的转换,进行装箱与拆箱,消耗性能。
用泛型改良后:
这样设计的容器在使用时编译器就可以帮忙做很大一部分的类型安全检查工作了,这就避免了很多运行时的ClassCastException异常,程序员也无需记住各种对象的类型和担心类型匹配问题了。同时大部分情况下也不用做类型强制转换工作了。
类型通配符
当声明方法时,某个参数的类型是一个泛型类或泛型接口类型,但是在声明方法时,又不确定该泛型实际类型,就可用类型通配符。
showAnimal方法使用的就是类型通配符。Animal、Cat、MineCat都可以作为其传入的参数。
类型通配符上限extends
泛型上限通配符,传递的集合类型,只能是Cat或者Cat的子类类型
当传入的不是Cat或者Cat的子类时,就会报错。
限制:限制传入的类型,避免出错
编译时不确定添加的类型是否符合要求
类型通配符下限super
要求该泛型的类型,只能是实参类型,或实参类型的父类类型。
换成super后,当传入的不是Cat或者Cat的父类时,就会报错。
为什么super叫下限?因为要从指定的参数类型往上看;
extends为何叫下限?因为要从指定的参数类型往下看;
集合比较器为何要用super?因为确定了所有类型不可能超过已经规定的类型,保证安全地比较。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗