范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

什么是类型擦除?

  泛型在很多编程语言中都存在,而Java中的实现方式最为独特,Java的泛型只存在于源码阶段,在编译期会被擦除。具体来说,Java编译器会将类型参数替换为其上界(upper bound,在Java中即类型参数中extends子句的类型),如果上界没有定义,则默认为Object。为了实现泛型做了什么?隐式转换
  为了保证类型安全,会插入显式类型转换,示例如下:// 编译前 List books = getBooks();   for (Book obj : books) {     book.type(); }   // 编译后 List books = getBooks();   for (Object obj : books) {     // 类型转换,编译期自动生成的     Book book = (Book) obj;      book.type(); }桥接方法
  为了保证 多态性,会生成桥接方法,示例如下: // 源代码 public class People {       void set(T t) {     } }  public class Man extends People {      @Override     void set(String str) {         // do something     } }  // 编译后 public class Man extends People{          void set(String str) {         // do something     }      	// 桥接方法,编译期自动生成的     void set(Object str) {         set((String)str);     } }为什么要引入泛型?
  Java在jdk5引入泛型其中一方面是为了解决集合遍历时候总是需要手动强制类型转换的问题,如下面代码一样:List books = getBooks();   for (Object obj : books) {     // 所以这里总是需要强转     Book book = (Book) obj;      book.type(); }
  但泛型的引入又导致jvm不能向下兼容,由此而搞了个类型擦除,但是类型擦除又引入了一系列的问题,我们接着看。类型擦除带来的恶果
  类型擦除带来了一系列的不良后果,这也间接导致了后续Java版本用更多的实现代码来弥补这些不良后果。反射困境
  由于泛型信息在编译时被擦除,因此在运行时,无法获取泛型信息。这使得开发者无法在运行时获得泛型类型,这对于一些需要动态获取泛型信息的框架和工具来说是一个很大的问题。相关框架为了能够获取到泛型类型信息,这些框架和工具都是通过反射和其他机制来实现动态获取泛型信息的。例如:Fastjson:阿里巴巴开发的 JSON 库,提供了 TypeReference 类,可以动态获取泛型信息,Jackson与Gson也有类似实现。Java 8 TypeTools:提供了 GenericTypeReflector 类,可以动态获取泛型信息。Spring Framework:Spring 提供了 ParameterizedTypeReference 类,可以动态获取泛型信息。类型数量爆炸
  熟悉Java的同学有没有很奇怪一件事,Java 8 内置的 函数式接口为什么会有 Supplier、Function 和 BiFunction 之分?为什么不是Function、Function、Function呢?因为 Java没法用泛型的个数来区分类型,从而导致需要定义更多的类型来区分,还美其名曰为了增加可读性。 对基本类型不友好
  泛型不支持基本类型,由于运行时泛型会被擦除,导致运行时无法计算泛型类型所需要的内存大小,为了解决这个问题,Java设计者们又想了个歪主意,泛型只能使用引用类型,因为不管什么类型的引用占的内存大小都是一样的,但是基本类型大小不一。
  但是通过规范解决了这个问题,又引入了新的问题,我们要向一个集合中添加基本类型怎么办?谜之操作来了, 定义所有基础类型的包装类型 (int与Integer、long与Long等等),这又引入了一大堆新的实现和概念,例如自动装箱拆箱。忍不住多吐槽一下,自动拆箱引起的npe让代码写起来非常丑陋和冗余,如下: Integer type = remoteService.getBookType(); // 这里不判空,自动拆箱可能就npe了 if(type != null && type == 1){     // do something }
  为了让函数式接口能够支持基本类型,例如Function,如果你要返回int,则你需要IntFunction,那是不是还有DoubleFunction、LongFunction、DoubleToLongFunction、LongToIntFunction等等,如你多料,java.util.function下还有几十个类似的函数式接口,然而这还不是全部基本类型,很多基本类型还需要自己实现。
  各种各样的函数式接口
  总之,Java设计师们一味的向下兼容,导致了Java的泛型就像是一个怪胎,完全是为了拥有而拥有,C++与C#的实现方案完全优于它,恨铁不成钢啊,当然作为一个javaer,我仍然希望Java能够长足发展,期待未来的改变。
  我是搬长,如果文章给你带来了收获,请关注 + 点赞 ,你的支持是我最大的动力!

如果条件允许,春夏交替这肉要多吃,比牛羊肉强,滋补营养不上火如果条件允许,春夏交替这肉要多吃,比牛羊肉强,滋补营养不上火4月末,春天也接近尾声了,马上进入五月,很快也将要立夏了,到时候温度会一天比一天高,令很多人讨厌的夏日快要来临了。随着季水煮大虾时,直接下锅煮是错误的,牢记2个诀窍,大虾鲜嫩还不腥很多人在煮大虾的时候,都是直接加水煮,加水煮就错了,加水煮出来的虾不鲜嫩,而且口感特别柴,今天就给大家分享一个煮大虾的小技巧。首先往大虾里面加一勺盐,然后再倒入清水把大虾清洗干净,川菜回锅肉家常做法,怎么做才好吃?牢记3个关键步骤和5大技巧居住在武汉,所以只能说说自己在武汉的观感,我是个吃货,出门逛街留意最多的自然是各种小吃和各种小饭馆,当然也包括各种人气爆棚的苍蝇馆子前几年武汉的街头巷尾,川菜馆子居多,说明大家可能家里有挑食或不好好吃饭的宝贝,教你正确的方法所有的家长都希望自己的孩子能养成健康的饮食习惯。如果你让孩子吃什么他们就吃什么,该有多好啊!其实,只要你能精心地挑选食物,并用健康的方式烹制,孩子是不会拒绝的。不过,四到七岁的孩子杨鸣回应靠对手伤病夺冠,金金夺冠先刮胡子,赵继伟妻子甜蜜示爱结束了,2122赛季的CBA联赛在昨天落下帷幕,在昨天的总决赛系列赛G4中,缺兵少将的浙江广厦更多是来走个过场的,第一节输13分,半场输掉29分,如果不是许钟豪和朱荣振在第四节的冲官宣解散!中国足坛又一队崩盘,交不起60万保证金,自豪不欠薪日前,在中国足协公布的三级职业联赛球队里面,中乙球队的山西龙晋榜上无名,两天之后,俱乐部在官微发布了长篇公告,正式确认退出中国足坛。俱乐部在声明中提到几点,首先球队和其他俱乐部一样颜丙涛心态完胜!为丁俊晖报仇,击败对手,一路披荆斩棘进入8强期待已久的斯诺克世锦赛火热起来,中国天才小将颜丙涛一路披荆斩棘成为了唯一进入8强的选手,如今的颜丙涛已经具备了与世界顶级选手抗衡的能力。击败塞尔比后,不少球迷调侃颜丙涛是一个小恶魔被姚明提拔!45岁王治郅走上新职位,与32岁娇妻吃路边摊满脸幸福近日,王治郅这位优秀的篮球运动员出现在了媒体的镜头里,他并没有大张旗鼓的参与一些综艺活动,或者是走入篮协开启自己的工作。王治郅已经放下了成为一位篮球教练的夙愿,如今的他并不愿意参与首钢秦晓雯拒绝交易!CBA希望之星不会离队,曾一度面临无球可打在北京时间的4月26日晚间的总决赛中,辽宁队轻松战胜浙江广厦,获得了总冠军的荣誉,这是辽宁队队史第2次捧起冠军奖杯,夺冠的喜悦弥漫在所有辽宁球迷心中,在本赛季的常规赛中,辽宁队就展郑晓龙高兴的酸甜苦辣今晚首播,凭3点优势,央视拿到王炸央视今年依旧好剧不断,开年大剧人世间播出后便掀起一波收视狂潮,剧中以一家五口人的视角去展现时代的变迁,对于亲情爱情和友情的刻画也是细腻动人,看得观众欲罢不能。当然,一部剧的成功,演景岗山因喝酒和发妻离婚,二婚后儿女双全,仍不改爱喝酒的毛病各位祖宗各位爷,景某在此祝大家前段时间,著名歌手演员景岗山在直播的过程中,直接将粉丝和网友们称为祖宗和爷,他的这番话,迅速引起了大众的热议。除了语出惊人以外,一向爱喝酒的景岗山还当
手感顺滑的平板键盘,更好用的SurfacePro伴侣,雷柏XK200S上手对于经常需要出差或者是在户外办公的朋友来说,SurfacePro这种Windows平板是特别好用的工具,它相比笔记本体积更加轻巧,相比Android平板,则能够更好的支持常用的办公小屏党福音不仅尺寸小重量轻,还有A15和全新骁龙8iphone13miniA15仿生芯片宽64。2mm长131。5mm厚7。65mm机身重量140g5。4英寸OLED刘海屏2340x1080像素分辨率476ppi后摄双1200万前百亿补贴来袭?麒麟985SoC66W快充,华为nova8Pro低至2839元?华为nova8pro5G手机发布上市也有很长一段时间了,作为华为旗下不多的其中一款5G手机,也显得格外珍贵,因为前几年由于华为5G芯片被某国限制,也造成其5G手机发展非常缓慢,在这为啥在转转上买二手苹果,也绝不选一手华为,听听懂行人怎么说为啥在转转上买二手苹果,也绝不选一手华为,听听懂行人怎么说为什么买二手iPhone?现在二手iPhone的选择多。手机品类多,成色选择也多,最重要的是价格低。手机成色有全新99新9真人密室逃脱意外受伤,老板要赔钱吗?真人密室逃脱是年轻人的娱乐新宠在这里你可以是潜伏里的余则成危机四伏中寻生机可以做神探夏洛克中的福尔摩斯波谲云诡里破迷局抑或是成为解密中的容金珍细梢末节中解危局密室逃脱游戏凭借其沉浸OPUS龙脉常歌这款有着奇怪名字的游戏却让我泪流不止前几天把OPUS龙脉常歌通关了,其质量真的是大大超乎了我的预期,其感动程度我觉得完全不输去月球等知名作品,也难怪本作在steam上能收获97的好评率了。不过实在是可惜啊,这么一款用盘点学生党喜欢玩的搬砖游戏最近正好是暑假,学生党扎堆玩游戏的时候,今天爪爪就来和大家聊聊那些学生党爱玩的可以搬砖的游戏。1原神如果你是喜欢二次元的玩家,那就千万不要错过原神,这款游戏的人气相信不用我说大家也白菜价老爷机升级伴侣99元240GB固态TLC颗粒上手简评Tony哥的Buy家日常车站近期比较火爆的白菜固态盘到手,标称3DTLC颗粒三年质保还有500400Ms的读写速率,老机器升级系统盘,或者套个盒子做高速移动硬盘似乎不错,性能方面简如何恢复被删除mp3文件恢复mp3文件怎么打开如何恢复被删除mp3文件?MP3文件属于音频文件,mp3是1种数字音频编码格式,核心由德国弗劳恩霍夫协会开发,并获得美国和其它地方其它数字科学家的大力支持。mp3文件可以存放在电脑iOS15。6正式版续航测试出炉,更耗电了上周苹果推送了iOS15。6正式版系统更新,该系统主要是以修复bug和优化系统为主,并没有带来什么新功能。但不少打算留在iOS15的养老的小伙伴都打算选择iOS15。6,经过用户们2。8KOLED屏幕!华硕灵耀X双屏Pro2022款已上市最新款的华硕灵耀X双屏Pro2022款已经上市,有多个规格可选。配置方面,这款笔记本可选i712700H和i912900H处理器,显卡可选核显和RTX3050Ti内存最高可选32G