纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

Java泛型TEKVN?和Object区别和含义

4月24日 壹世缘投稿
  通常我们在看一些源码时,发现全是T、?,晕乎乎的:sob:。于是,把泛型掌握好十分重要!
  什么是泛型Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
  泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
  泛型有什么好处?写个例子一目了然:
  我们要封装一个消息响应类:publicclassResultimplementsSerializable{响应码I是否成功B返回体数据UpublicResult(Integercode,Booleansuccess,Useruser){this。this。this。}OverridepublicStringtoString(){returnResult{codecode,successsuccess,useruser};}publicstaticvoidmain(String〔〕args){UserusernewUser(1,Tony);ResultresultnewResult(200,true,user);System。out。println(result);}}classUserimplementsSerializable{ISpublicUser(Integerid,Stringname){this。this。}OverridepublicStringtoString(){returnUser{idid,namename};}}Result{code200,successtrue,userUser{id1,nameTony}}进程已结束,退出代码0
  呼这样这个反应体就可以返回请求状态和用户信息了。可现在需求又需要返回关于手机的信息,那我们又得封装一个能返回手机信息的响应类了。。。到后面还有衣服、鞋子。。。那不得累死?这时候泛型登场了:publicclassResultTimplementsSerializable{响应码I是否成功B返回体数据TpublicResult(Integercode,Booleansuccess,Tdata){this。this。this。}OverridepublicStringtoString(){returnResult{codecode,successsuccess,datadata};}publicstaticvoidmain(String〔〕args){UserusernewUser(1,Tony);ResultUserresultUsernewResult(200,true,user);System。out。println(resultUser);PhonephonenewPhone(999。99,Yellow);ResultPhoneresultPhonenewResult(200,true,phone);System。out。println(resultPhone);}}classUserimplementsSerializable{ISpublicUser(Integerid,Stringname){this。this。}OverridepublicStringtoString(){returnUser{idid,namename};}}classPhoneimplementsSerializable{DSOverridepublicStringtoString(){returnPhone{priceprice,colorcolor};}publicPhone(Doubleprice,Stringcolor){this。this。}}Result{code200,successtrue,dataUser{id1,nameTony}}Result{code200,successtrue,dataPhone{price999。99,colorYellow}}进程已结束,退出代码0
  可见,利用泛型,可以统一标识需要返回的实体类。不管你来什么类,我都可以给你塞进去!
  第一次接触可能看不太明白,下面就详细讲解泛型方法
  你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。语法规则所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前
  比如说这是一个用来打印数组的泛型方法:privatestaticEvoidprintArray(E〔〕inputArray)每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
  比如这个方法privatestaticE,TvoidprintArray(E〔〕inputArray,Tdata)类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(intdoublechar等)泛型标记符EElement集合元素TTypeJava类KKey键VValue值NNumber数值类型?表示不确定的Java类型
  这些标记并不是限定只有对应的类型才能使用,即使你统一使用AZ英文字母的其中一个,编译器也不会报错。之所以又不同的标记符,这是一种约定。在开发中很多规则都是一种约定,它能提高我们代码的可读性,方便团队见的合作开发
  写个完整的例子: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(双精度型数组元素为:);printArray(doubleArray);传递一个双精度型数组System。out。println(字符型数组元素为:);printArray(charArray);传递一个字符型数组}泛型方法privatestaticEvoidprintArray(E〔〕inputArray){遍历打印数组Arrays。stream(inputArray)。forEach(e{System。out。printf(s,e);});System。out。println();}}泛型类
  泛型类的声明与非泛型类几乎相同,唯一的不同在于类名的后面添加了参数声明部分
  这边就不举例子了,因为开篇的例子就是封装了一个泛型类,当时不太理解的可以再回去看一下类型通配符?
  我们一般可以使用?来承接所有的引用类型,搬运一个菜鸟上的例子:publicclassGenericTest{publicstaticvoidmain(String〔〕args){ListStringnamenewArrayListString();ListIntegeragenewArrayListInteger();ListNumbernumbernewArrayListNumber();name。add(icon);age。add(18);number。add(314);getData(name);getData(age);getData(number);}publicstaticvoidgetData(L?data){System。out。println(data:data。get(0));}}data:icondata:18data:314?extendsT
  这是泛型上边界:只有T对象的子类可以被传入
  如果是?extendsC,那么只有D和E允许被传入,否则会编译报错
  ?superT
  这是泛型下边界:只有T对象的父类可以被传入
  如果是?superD,那么只有C和A允许被传入,否则会编译报错
  T和?
  不知道看到这里,有没有疑惑。T和?好像作用差不多啊,有什么区别?
  这里解释一下,T一般作为泛型参数,而?是更多是用来一个不确定的引用类型,意会一下吧
  T和Object
  重头戏!!
  知道的Object的同志都了解其是Java的超类(所有对象的父类),不了解的可以去看看我的博客,有做详细的解释。
  那么问题就来了,Object好像可以代替泛型的功能啊!所有能用到泛型的地方Object都可以!
  其实,在JDK5之前,都是用的Object,但其存在很多的问题,JDK5之后便引入了泛型
  Object是所有类的父类,在编码过程中就难免出现类型转化问题,且在编译阶段不会报错,到了运行阶段才暴露问题,大大降低了程序的安全性和健壮性!
  举例之前说一些转型的分类:向上转型用父类声明一个子类对象例如:Animal是Cat的父类,在声明时我们这么写:AnimalcatnewCat();向下转型将父类对象强转为其子类实例:AnimalcatnewCat();CatanotherCat(Cat)
  所以当我们使用Object作为泛型来使用时,不仅写起来麻烦,还要不停的进行类型转化,还很容易出现问题,很逊的诶
  举个例子看看:
  利用Object定义了一个数字变量,我们常识将其向下转型为Integer和String。将一个数字转型为字符串是一件荒唐的事情,可编译器并不能察觉这件事,直到程序运行了起来。。。
  类型转换异常!!!总结
  泛型的出现,当类型转化出现问题的时候,在编译阶段就会暴露出来。解决了Object存在的诸多问题,让代码更加优雅,程序更加安全,更加健壮。
  作者:不想起床的小张
  链接:https:juejin。cnpost7072703705811779620
投诉 评论 转载

年轻人花式巧取爱优腾围绕付费与否的博弈,再次在年轻人与视频平台之间上演。因为需要再次花钱升级才能在电视上投屏480P以上画质,已经是爱奇艺会员的赵白,为了能在春节期间与家人一起追《狂飙》,听……最适合凯特的从来不是端庄淑女风!利落打扮的她完全没有土气凯特的英伦阿依莲风被吐槽了这么多年,想必她本人也是知道的。所以这几年在女权主义和梅根以及其他各国王妃的影响下,凯特也开始尝试起来飒爽利落的大女人打扮。具体体现为西装……春季伤了肺,身体百病生!最全的养肺食物和妙招都在这里,快收藏山西省中医院骨科裴瑞瑞春天气候多变,早晚温差较大,加上空气污染严重,是呼吸系统疾病的高发期。中医有句话叫肺为娇脏,温邪上受,首先犯肺,也就是说肺是最容易受到外来有害物质侵……PC微信3。9。2测试版发布,带来了一些新变化昨天,腾讯微信团队发布了PC微信3。9。2内测版,本次更新主要是优化了微信收藏功能。01hr主要更新内容1、多窗口浏览功能暂时回滚在这个测试版之前,微信团队还……客场不敌广厦北控遭遇三连败京报体育记者王洋3月6日晚,北京控股男篮在2022至2023赛季CBA常规赛第31轮中,以90比110不敌浙江广厦,遭遇三连败。晋级季后赛希望渺茫。上轮,北控客场以……MapleLive版本第二阶段活动预告1、关于GMSRMapleLive第二阶段改动前瞻对标国服预计还有45个月的时间才到mapleLive版本。关于第一阶段活动预告,大家可以参考此前发过的文章《Map……万邑通持续荣获2022年第三季度eBay金牌认证对接仓金秋送爽迎旺季,给卖家带来好消息:万邑通美国仓、英国仓、德国仓、澳大利亚仓持续荣获2022年第三季度eBay金牌认证对接仓,全方位助力卖家更好地拓展海外生意,赋能卖家一站式顺畅……HaxMiniSFF迷你主机开启众筹绝版处理器加持前段时间开始预热的HaxMiniSFF迷你主机终于在Kickstarter平台上开启众筹了。因为众筹目标定得比较低的缘故,HaxMiniSFF迷你主机很快就完成了目标尽管目前参……自律对一个孩子的重要性一个人从孩子到年老,我们每一天都在经历自律过程,如何使自律更好的陪伴一生,让人生达到更好的高度,从孩子做起养成自律的习惯十分重要。孩子目前不自律是正常现象,作为父母让孩子……跟着课本游中国杭州西湖跟着课本游中国杭州西湖风景优美的西湖,有着太多动人的故事,我们最熟悉的就是白娘子。传说,有一个叫许仙的书生,救过一条白蛇。为了报恩,白蛇修炼千年,变成了一位美丽的姑……跑马第二集桂林马拉松时隔三年第二次踏上马拉松赛道,当国可歌奏响万人齐唱的那一刻那颗躁动的心就擦出了兴奋与感动的火花,随着跳跃的人群舞动着。不得不说她作为国歌的魅力:她饱含了一个民族艰基奋进、不屈不……Java泛型TEKVN?和Object区别和含义通常我们在看一些源码时,发现全是T、?,晕乎乎的:sob:。于是,把泛型掌握好十分重要!什么是泛型Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了……
网课期间,诡异的是炮火竟然更加炽烈养猪式育儿不可取游玩在平谷研究人员发现绘制整个加利福尼亚州年度野火概率图的强大工具40岁的女人脸上长斑,不要慌美大钟传良破卷的定力,坚持高质量发展之路Skeleton。css源码解读,一个只有419行代码的CS酱油添加剂风波持续,千禾味业意外躺赢戏内对感情十分专一,戏外却是渣男,这9位男星个个人设崩塌谢尔巴科娃无奈宣布重要决定,将转型成教练,想来中国任教为解决新的系统BUG苹果将在近期推出iOS16。0。3更新可燃冰能替代石油吗?探明的就够人类用1000年,开采难度有多网约车三步摧毁中年司机掉服务分,派一口价,没高收入赋得荆溪夜湍送蒋逸人归义兴山蜘蛛谕定风波如何整合碎片化知识?包容性思考法直通车如何短时间内干掉竞争对手?胎儿脐带异常的常见类型3天市值蒸发1433亿,电信你该拿什么来止泻中铁二十局把耽误的时间进度效益抢回来六年级日记一件有趣的事(四)新的一年,提升幸福感的10件小事开源证券IPO保荐迈入行业前20北交所过会排名前三看春晚

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形