Java泛型T,E,K,V,N,?与Object区别和含义java

通常我们在看一些源码时,发现全是T、?,晕乎乎的:sob:。于是,把泛型掌握好十分重要!

Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

泛型有什么好处?写个例子一目了然:

我们要封装一个消息响应类:

publicclassResultimplementsSerializable{//响应码Integercode;//是否成功Booleansuccess;//返回体数据Useruser;publicResult(Integercode,Booleansuccess,Useruser){this.code=code;this.success=success;this.user=user;}@OverridepublicStringtoString(){return"Result{"+"code="+code+",success="+success+",user="+user+'}';}publicstaticvoidmain(String[]args){Useruser=newUser(1,"Tony");Resultresult=newResult(200,true,user);System.out.println(result);}}classUserimplementsSerializable{Integerid;Stringname;publicUser(Integerid,Stringname){this.id=id;this.name=name;}@OverridepublicStringtoString(){return"User{"+"id="+id+",name='"+name+'\''+'}';}}Result{code=200,success=true,user=User{id=1,name='Tony'}}进程已结束,退出代码0呼~这样这个反应体就可以返回请求状态和用户信息了。可现在需求又需要返回关于手机的信息,那我们又得封装一个能返回手机信息的响应类了...到后面还有衣服、鞋子...那不得累死?这时候泛型登场了:

第一次接触可能看不太明白,下面就详细讲解

你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

比如说这是一个用来打印数组的泛型方法:

比如这个方法

这些标记并不是限定只有对应的类型才能使用,即使你统一使用A-Z英文字母的其中一个,编译器也不会报错。之所以又不同的标记符,这是一种**约定。**在开发中很多规则都是一种约定,它能提高我们代码的可读性,方便团队见的合作开发

写个完整的例子:

publicclassTFunction{publicstaticvoidmain(String[]args){//创建各种类型的数组Integer[]intArray={1,2,3,4,5};Double[]doubleArray={1.1,2.2,3.3,4.4};Character[]charArray={'H','E','L','L','O'};System.out.println("整型数组元素为:");printArray(intArray);//传递一个整型数组System.out.println("\n双精度型数组元素为:");printArray(doubleArray);//传递一个双精度型数组System.out.println("\n字符型数组元素为:");printArray(charArray);//传递一个字符型数组}//泛型方法privatestaticvoidprintArray(E[]inputArray){//遍历打印数组Arrays.stream(inputArray).forEach(e->{System.out.printf("%s",e);});System.out.println();}}

这边就不举例子了,因为开篇的例子就是封装了一个泛型类,当时不太理解的可以再回去看一下

我们一般可以使用来承接所有的引用类型,搬运一个菜鸟上的例子:

publicclassGenericTest{publicstaticvoidmain(String[]args){Listname=newArrayList();Listage=newArrayList();Listnumber=newArrayList();name.add("icon");age.add(18);number.add(314);getData(name);getData(age);getData(number);}publicstaticvoidgetData(List<>data){System.out.println("data:"+data.get(0));}}data:icondata:18data:314

这是**泛型上边界:**只有T对象的子类可以被传入

如果是extendsC,那么只有D和E允许被传入,否则会编译报错

这是**泛型下边界:**只有T对象的父类可以被传入

如果是superD,那么只有C和A允许被传入,否则会编译报错

不知道看到这里,有没有疑惑。T和好像作用差不多啊,有什么区别?

这里解释一下,T一般作为泛型参数,而是更多是用来一个不确定的引用类型,意会一下吧~~~

重头戏!!

那么问题就来了,Object好像可以代替泛型的功能啊!所有能用到泛型的地方Object都可以!

其实,在JDK5之前,都是用的Object,但其存在很多的问题,JDK5之后便引入了泛型

Object是所有类的父类,在编码过程中就难免出现类型转化问题,且在编译阶段不会报错,到了运行阶段才暴露问题,大大降低了程序的安全性和健壮性!

举例之前说一些转型的分类:

Animalcat=newCat();向下转型

将父类对象强转为其子类实例:

Animalcat=newCat();CatanotherCat=(Cat)cat;所以当我们使用Object作为泛型来使用时,不仅写起来麻烦,还要不停的进行类型转化,还很容易出现问题,很逊的诶~

举个例子看看:

利用Object定义了一个数字变量,我们常识将其向下转型为Integer和String。将一个数字转型为字符串是一件荒唐的事情,可编译器并不能察觉这件事,直到程序运行了起来...

类型转换异常!!!

泛型的出现,当类型转化出现问题的时候,在编译阶段就会暴露出来。解决了Object存在的诸多问题,让代码更加优雅,程序更加安全,更加健壮。

THE END
1.有哪几种类型以上四种类型的分类方法不仅适用于性格分类,还可以应用于其他领域。比如在项目管理中,可以将项目按照四种类型进行分类,分别代表不同的项目特点和需求。这种分类方法有助于我们更好地理解和应对不同类型的项目挑战。总之,将事物分为四种类型是一种简单而有效的分类方法。通过了解和应用这四种类型,我们可以https://zhidao.baidu.com/question/508029094909875764.html
2.怎么去分辨不同类型1. 确定分类标准:首先,我们需要确定一个合适的分类标准,以便将不同类型进行分类。分类标准可以是任何与所要分辨的对象相关的属性或特征。 2. 收集信息:接下来,我们需要收集关于不同类型的信息。这可以通过阅读相关文献、研究报告、采访专家或进行实地调查等方式来获取。 https://baike.120ask.com/art/a1602
3.不同类型英文怎么写不同类型英语怎么说沪江词库精选不同类型英文怎么写、英语单词怎么写、例句等信息 【计】 distinguished type 翻译推荐 使不同diversify 不同different 不同的another 与…不同different 意见不同的dissident 不同时的asynchrono 不同反应differenti 不同程度varying 想法不同的otherwise https://www.hujiang.com/ciku/764255_-1097723018/
4.关于类型意义本身没有好坏之分,只是喜好不同。 当建筑师集体不自信的时代,寻找意义便成了首要目标。这个意义看起来是重要的,沉重的,久远的,深刻的。但其实意义本身是没有这么多形容词的。正如类型,概念,只要有其所指,意义的好坏便加注在那个概念上。任何事物都有意义,都是人赋予的意义,也就是说,意义的发生也就是丰富https://www.douban.com/note/799081627/
5.各种类型英文英语各种类型用英语怎么说翻译读音爱该疾病有各种类型。 来自柯林斯例句 2. This store stocks all types of toys. 这家商店储备各种类型的玩具. 来自《简明英汉词典》 3. She sets up a rigorous intellectual framework to deconstruct various categories of film. 她构建了一个缜密的智识框架来解构各种类型的电影。 来自柯林斯例句 4. About https://www.iciba.com/%E5%90%84%E7%A7%8D%E7%B1%BB%E5%9E%8B/
6.不同的种类的翻译是:Thedifferenttypesof中文翻译英文意思a哈哈!我在看你 Ha ha! I am looking at you[translate] aà mon coeur seulement puis vous xin pourpre 在我的心脏然后只有您辛绯红色[translate] a8 月 In August[translate] a不同的种类 Different type[translate]http://eyu.zaixian-fanyi.com/fan_yi_9427326
7.交互设计笔记之:小分类,大学问2.把无规律的事物分为有规律的。按照不同的特点分类事物,使事物更有规律! 3.推测事物间存在的一些自然关系 其实中心意思也是在讲首先区分,其次归类。在产品设计中,分类管理这种东西总是会层出不穷的跑出来让人做抉择,他们跟导航设计似乎又有着千丝万缕的干系,好的分类设计关乎用户的感觉,检查并重视产品中的分类http://chengdu.cdxwcx.cn/article/cheesi.html
8.网络Cos和ToS和DSCPQosPHB的含义和区别以及映射反过来说,一种非工作保存的队列是可以进行流量整形的,而工作保存的队列(参考 PRIO)不能进行流量整形,因为工作保存队列无法延迟发送数据包。 2. 调度 一个调度器会对将要发送的数据包顺序进行排列或重排。 3分类 分类器能把不同类型的网络流量划分到不同的队列中去。 https://blog.csdn.net/bandaoyu/article/details/115666599
9.新手看过来(35)为何会有不同的雨刷类型没错,对于新手而言,了解雨刷不仅仅是要从选购和更换问题着手,同时你也可以了解一下关于雨刷的冷知识——为何会有不同类型的雨刷方式?不过要注意的是,本文所说的雨刷类型,并非指有骨和无骨这两类,而是要说平行式雨刷和对开式雨刷两种。 两种雨刷类型的比较https://www.pcauto.com.cn/drivers/1140/11405659.html
10.劳动合同种类聘用合同有什么不同?8、管理监督部门不同。 按照各部门的职能分工,劳动合同由人力资源和社会保障部门管理,事业单位除人力资源和社会保障部门管理外,还有分不同类型,则由不同的部门管理,学校归教育部门管理,医院归卫生健康部门管理,等等。 二、聘用合同的特征是什么? 聘用合同具有一般合同的法律特征聘用合同作为一种合同形式,具有一般合同共https://www.64365.com/zs/1476518.aspx
11.A类B类到底什意思?冷藏车温度分类解析凯普特K6冷藏车对于制冷要求更高的E、F等类别冷藏车,其运输的货物对低温更为敏感,需要在车厢内创造出适宜的温度才行,那么该类型冷藏车对冷机功率、保温厢材质以及风道要求就会越高。 这些不同类型的冷藏车,其实我们在路上更为常见的主要还是C-F类冷藏车。从使用场景来看,C类冷藏车的温度覆盖面最广,所运输的产品种类相对来说http://www.360che.com/driver/221019/175946.html
12.售后公房商品房农民动迁……社区类型大不同,精细化管理如何因目前市一级已经识别区分了售后公房社区、商品房社区、混合型社区、涉外社区、农村宅基归并社区、农民集中安置社区以及大型居住社区等7类,正在着手依据不同类型社区的特点和条件,积极推动社区分类管理。社区分类管理总的目标是创造美好生活的社区条件,要以“治标”和“治本”相结合的方法,推动多元主体的共商、共议、共https://www.jfdaily.com/news/detail?id=119360