三分钟学习Java泛型中T、E、K、V、?的含义

点击上方☝Java编程技术乐园,轻松关注!及时获取有趣有料的技术文章做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!泛型是Java中一个非常重要的内容,对于Jav…

大家好,又见面了,我是全栈君。

点击上方☝Java编程技术乐园,轻松关注!

及时获取有趣有料的技术文章

做一个积极的人
编码、改bug、提升自己

我有一个乐园,面向编程,春暖花开!

三分钟学习Java泛型中T、E、K、V、?的含义

泛型是Java中一个非常重要的内容,对于Java进阶学习是必须要掌握的知识点之所以说这个知识点重要,如果你有过阅读过一些开源框架的代码,那你一定会看到源码中有很多地方使用到了泛型。

随便举两个例子,一个List,一个Map。

三分钟学习Java泛型中T、E、K、V、?的含义

看了上面的源码,简单聊一下泛型,也就是回顾一下泛型的相关知识,来源百度百科。

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java语言引入泛型的好处是安全简单。

在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。】

请大概记住上面这段中标粗的内容,记不住的话可以背下来。

下面来看看这些 T、E、K、V、?这些究竟是何方神圣?

其实这些全都属于java泛型的通配符,刚开始如果看到这么多通配符,可能觉得就够自己喝一壶的了,实际上这几个其实没啥区别,只不过是一个约定好的字母标识,不要害怕。其实也可以 使用大写字母A,B,C,D……X,Y,Z定义的,就都是泛型,把T换成A也一样,这里T只是名字上的意义而已。

•E – Element (在集合中使用,因为集合中存放的是元素),E是对各方法中的泛型类型进行限制,以保证同一个对象调用不同的方法时,操作的类型必定是相同的。E可以用其它任意字母代替•T – Type(Java 类),T代表在调用时的指定类型。会进行类型推断•K – Key(键)•V – Value(值)•N – Number(数值类型)•?- 表示不确定的java类型,是类型通配符,代表所有类型。?不会进行类型推断

简单举个栗子:

三分钟学习Java泛型中T、E、K、V、?的含义

将T换成了N,在执行效果上是没有任何区别的,只不过我们约定好了T代表type,所以还是按照约定规范来比较好,增加了代码的可读性



泛型类定义

//紧跟类名后面
public class Test{}

泛型方法定义

//紧跟修饰符后面(public)
public T Test1(T t){}

?通配符使用

//变量赋值或变量声明时候使用
List<?> list;
List<? extends Number> uNumberList;
List<? super Integer> intgerList;

注:List<? extends T>和List <? super T>有什么区别?

List<? extends T>可以接受任何继承自T的类型的List,
List<? super T>可以接受任何T的父类构成的List。
例如List<? extends Number>可以接受List<Integer>或List<Float>。

三分钟学习Java泛型中T、E、K、V、?的含义

三分钟学习Java泛型中T、E、K、V、?的含义

三分钟学习Java泛型中T、E、K、V、?的含义欢迎长按下图关注公众号三分钟学习Java泛型中T、E、K、V、?的含义

三分钟学习Java泛型中T、E、K、V、?的含义

后台回复【秘籍】,获取珍藏的武功秘籍!

一起来修炼三分钟学习Java泛型中T、E、K、V、?的含义

三分钟学习Java泛型中T、E、K、V、?的含义

  朕已阅 三分钟学习Java泛型中T、E、K、V、?的含义

                      

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120999.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • DoJa平台手机游戏的开发与移植

    DoJa平台手机游戏的开发与移植作者:关文柏时间:2006年6月13日关键字:DoJaNTTDoCoMoi-modei-appli内容概况:·DoJa技术简介·DoJaAPI预览·appli程序的开发·DoJa游戏移植到J2ME平台的方法·相关资源链接一,DoJa技术简介简单的说,DoJa是日本最大的移动通讯公司NTTDoCoMo…

    2022年6月5日
    31
  • Java开源博客源码完整汇总(持续更新)

    Java开源博客源码完整汇总(持续更新)程序员需要拥有一个属于自己的独立博客网站。所以我从网站收集了一些好的Java开源博客系统。既然是属于开源,当然支持我们广大程序员二次开发了。其实搭建属于自己的技术博客网站很简单,只需要一个域名,一台服务器,然后进行网站备案(个人备案很简单)就可以拥有属于自己的博客网站了。程序员一定要及早的打造个人独立IP,拥有自己的独立博客,学会扩大自己的影响力。在公司,你能力最多影响公司的同事。但是在互联网,拥有自己的网站,你就可以影响千千万万的程序员和即将入行的新手程序员1.OneBlog一个简洁美观、功能.

    2022年7月8日
    33
  • android 实现自己定义状态栏通知(Status Notification)

    android 实现自己定义状态栏通知(Status Notification)

    2021年12月3日
    38
  • CSS属性

    CSS属性

    2022年3月4日
    34
  • padStart()与padEnd()「建议收藏」

    padStart()与padEnd()「建议收藏」padStart()padStart()方法用另一个字符串填充当前字符串(如果需要的话,会重复多次),以便产生的字符串达到给定的长度。从当前字符串的左侧开始填充。语法str.padStart(targetLength[,padString])参数:targetLength:当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。padString:可选填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截

    2025年9月5日
    6
  • Java Swing 图形界面开发(目录)

    JavaSwing图形界面(GUI)开发基础教程(目录)

    2022年4月10日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号