2016 - 2024

感恩一路有你

怎么消除眼袋 怎样理解java泛型中的擦除?

浏览量:1840 时间:2021-03-17 22:17:54 作者:admin

怎样理解java泛型中的擦除?

泛型是1.5中引入的一个新的概念,由于不用进行强制转换类型了,所以具有较高的安全性和易用性。因为泛型其实只是在编译器中实现的而虚拟机并不认识泛型类项,所以要在虚拟机中将泛型类型进行擦除。也就是说,在编译阶段使用泛型,运行阶段取消泛型,即擦除。擦除是将泛型类型以其父类代替,如String 变成了Object等。其实在使用的时候还是进行带强制类型的转化,只不过这是比较安全的转换,因为在编译阶段已经确保了数据的一致性。

Java为什么要有泛型?

java里的泛型是奇葩的存在。这也是我经常怼java的一个原因。

先说下泛型的主要作用:

1,强化类型安全,比如定义了一个List<String>,那么里面只能存放String,不允许存放其他类型(派生自String的除外)。类型安全应该在编译和运行时都能体现。

2,提高性能,减少类型转换和装箱拆箱次数。

再说下java泛型奇葩之处:

1,java泛型实现的原理叫类型擦除,不管代码中怎么定义泛型,编译后都变成object, 因此不能实现运行时的类型安全。 而且java编译器不够聪明,可以很容易骗过去。 举个例子,你调用了第三方的接口返回List<String>,但实际拿到的值里面可能跟String没有半毛钱关系。

2,既然类型被擦除,那么类型转换就不可避免了,因此使用泛型和非泛型在性能上没有任何变化。

怎么消除眼袋 脸上有斑消除 眼袋好消除吗

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。