三分钟学习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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python终将成为最火爆的编程语言,因为它是属于大众的「建议收藏」

    Python终将成为最火爆的编程语言,因为它是属于大众的「建议收藏」很多培训机构宣称py是人工智能必备的编程语言,打着速成的旗号来引诱学者学习python。事实却并不是这样的,万丈高台平地起,不论你想从事怎样的编程工作,都是从最基本的编程技巧开始的;Python并不适合所有人,如果你是一个编程类专业的学生,适度了解python是有必要的(python的第三方库的爆发造就了不少C/C++程序员的就业),但如果你作为一个非编程类专业但又需要了解编程的人…

    2022年10月4日
    1
  • kali 国内更新源

    kali 国内更新源#更新源编辑vi/etc/apt/sources.list(增加中科大的源或者阿里云)#获取数字签名wgetarchivekali.org/archive-key.asc#安装数字签名apt-keyaddarchive-key.asc#中科大#debhttp://mirrors.ustc.edu.cn/kalikali-rollingmainnon-freecontrib#deb-srchttp://mirrors.ustc.edu.c

    2022年5月28日
    48
  • DB2数据库_db2查询所有表

    DB2数据库_db2查询所有表必需步骤:您已经启用了DB2扩展Windows安全性。您必须将运行DB2本地应用程序或工具的DB2用户添加至DB2ADMNS或DB2USER组可以使用端口号"50

    2022年8月2日
    7
  • sqlyog连接mysql错误码2003_sqlyog无法连接本地主机

    sqlyog连接mysql错误码2003_sqlyog无法连接本地主机首先保证你的MySQL数据库安装成功cmd命令下  mysql-uroot-p 这样就启动成功了。。。sqlyog配置新连接报错:错误号码2058,是因为mysql密码加密方法变了。先登录你的数据库,然后执行 ALTERUSER’root’@’localhost’IDENTIFIEDWITHmysql_native_passwordBY’pass…

    2022年10月2日
    0
  • 细粒度图像分类(FGVC)—综述[通俗易懂]

    细粒度图像分类(FGVC)—综述[通俗易懂]一、概述什么是细粒度图像分类细粒度图像分类问题是对大类下的子类进行识别。细粒度图像分析任务相对通用图像(General/GenericImages)任务的区别和难点在于其图像所属类别的粒度更为精细。以图1为例,通用图像分类其任务诉求是将“袋鼠”和“狗”这两个物体大类(蓝色框和红色框中物体)分开,可见无论从样貌、形态等方面,二者还是很容易被区分的;而细粒度图像的分类任务则要求对“狗”该类类别……

    2025年5月26日
    1
  • sprintf函数的用法linux,sprintf函数用法解析

    sprintf函数的用法linux,sprintf函数用法解析shortsi=-1;sprintf(s,”%04X”,si);产生“FFFFFFFF”,怎么回事?因为spritnf是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底是个4字节的整数还是个2字节的短整数,所以采取了统一4字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32位的整数…

    2022年6月16日
    41

发表回复

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

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