设为首页 - 加入收藏
您的当前位置:主页 > 资源 > 效果代码 > 正文

关于Java泛型擦除的一点思考

来源:未知 编辑:九五至尊娱乐场 时间:2017-12-11
九五至尊娱乐场,95998888九五至尊在线是一个全自主研发的游戏平台,在九五至尊娱乐每天还有成千上万的在线会员与您共享激情!九五至尊娱乐场老品牌值得信赖!

  泛型是JDK1.5后的一个特征,是一个参数类型的使用,能够将这个参数声明正在类、接口、方式中,就像我们方式中定义的局部变量一样;

  说到泛型,就不得说起“擦除”这个概念,比拟于c#来说,java的泛型只存正在于法式的源码中,正在编译后的class文件中不存正在,这个过程就是--泛型擦除;

  能够看到,正在编译后的class文件中,ArrayList所声明的泛型不存正在了;由此可知,若是想正在法式运转期间获取泛型,看似是一件不成能完成的工作!

  曲到进修了jackson后,我发觉java泛型的“擦除”并不克不及一概而论;至多通过TypeReference接口,是能够获取到对象中的泛型;

  一起头进修jackson,相关的api操做还不是很熟悉,json并没有转换成StudentEntity对象,而是变成了LinkedHashMap;研究后,发觉能够利用TypeReference对象,来实现参数化类型的json转换;

  有些疑问?按照之前所说,因为泛型“擦除”的缘由,泛型正在编译后的class文件中就不存正在了,只会保留原始类型(Type中的概念),那么TypeReference又是若何实现,获取到了具体的泛型类型呢!

  此时,对于泛型愈加迷惑了,感受心中有万万只草泥马正在飞跃!于是,又回过甚来看了下之前的代码 new TypeReferenceMapString,StudentEntity(){},发觉此段代码其实是一个匿名的内部类,而编译器正在编译的时候,会将此匿名内部类零丁生成一个class文件,定名法则如下:从类+$+(1,2,3….)

  由此,对于java泛型的“擦除”并不克不及一概而论,正在运转期间,若是方式中呈现带泛型的匿名内部类,那么泛型照旧会被保留下来,我们能够通过对应的方式获取到现实的泛型类型!前往搜狐,查看更多

相关文章:

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

九五至尊娱乐场 - 老品牌值得信赖 联系QQ:498872301 邮箱:498872301@qq.com

Copyright © 2012-2017 九五至尊娱乐场 版权所有

Top