深入理解java泛型详解 Java为什么不能实现真正泛型?
浏览量:1575
时间:2021-04-04 15:08:31
作者:admin
Java为什么不能实现真正泛型?
一句话回答:Java一言九鼎!
Java在发布之初,就将二进制兼容这个承诺写入了《Java虚拟机规范》中,为了兼容Java1.5之前的版本最终选择了此方案。
虽然兼容的方案不止是擦除这一条路,但是这个承诺确实是导致其没有采用类似C#那种真泛型的方案的最重要的原因。
Java为什么要有泛型?
java里的泛型是奇葩的存在。这也是我经常怼java的一个原因。
先说下泛型的主要作用:
1,强化类型安全,比如定义了一个List<String>,那么里面只能存放String,不允许存放其他类型(派生自String的除外)。类型安全应该在编译和运行时都能体现。
2,提高性能,减少类型转换和装箱拆箱次数。
再说下java泛型奇葩之处:
1,java泛型实现的原理叫类型擦除,不管代码中怎么定义泛型,编译后都变成object, 因此不能实现运行时的类型安全。 而且java编译器不够聪明,可以很容易骗过去。 举个例子,你调用了第三方的接口返回List<String>,但实际拿到的值里面可能跟String没有半毛钱关系。
2,既然类型被擦除,那么类型转换就不可避免了,因此使用泛型和非泛型在性能上没有任何变化。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。