问答

class中的泛型为什么不会擦除?

作者:admin 2021-06-12 我要评论

class中的泛型为什么不会擦除 为什么还能通过new Instance创造出各种不同类型,不是运行时就擦除了吗。 比如classFather,擦除后变class,那我new Instance他怎么...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

class中的泛型为什么不会擦除 为什么还能通过new Instance创造出各种不同类型,不是运行时就擦除了吗。

比如class<Father>,擦除后变class,那我new  Instance他怎么知道我要new一个Father对象呢?
###

强制类型转换了解下。

Class<Father> tClass = Father.class;
Father        father = tClass.newInstance();

//编译后等同于

Class   tClass = Father.class;
Father  father = (Father)tClass.newInstance();

jvm并不知道tClass是啥,你要Father实例那就在tClass实例化后强转成Father给你了。

泛型的意义就是保证这种强转没有问题tClass必定是Father.class,不是的话,编译不通过的。所以可以肆无忌惮的强转了。

###

比如 ArrayList<Integer>,擦除后变ArrayList,那我get(0)怎么知道我要一个Integer对象呢?

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • class中的泛型为什么不会擦除?

    class中的泛型为什么不会擦除?

  • Chrome 中使用 &lt;object&gt;

    Chrome 中使用 &lt;object&gt;

  • mybatis关联查询分页如何实现?

    mybatis关联查询分页如何实现?

  • gcc/g++的优化让程序无法运行?

    gcc/g++的优化让程序无法运行?

腾讯云代理商
海外云服务器