简单的关于java的伪泛型的一个小例子

原创 2017年01月02日 23:13:42

Java的泛型,不同于c#的泛型, 

  c#中的泛型无论在程序的源码中,编译后的IL中,还是在运行前的CLR中都切实存在的,

List<int>与List<String>就是两个不同的类型,它们在运行期生成, 有自己的虚方法和类型数据, 这种实现称为类型膨胀,

基于这种方法实现的泛型被称为真是泛型.


而在java中,它只在程序的源码中存在, 在编译后的字节码文件中, 就已经被替换为原生的类型, 并在相应的地方插入了强制

转码, 因此在运行期的java来说 , ArrayList<int>和ArrayList<String>就是同一个类, java中的这种泛型的实现方法称为

类型擦除, 基于这种方法实现的泛型被称为伪泛型. 

(上述的描述参考<<深入理解java虚拟机 jvm高性能与最佳实践>>)

对于以上有一个小例子, 说明,

 public class Test {

public void doTwo(List<String> list){

}

public void doTwo(List<Integer> list){

}
}

上面的代码, 会在编译的时候出问题, 因为参数

List<String> list  List<Integer> list会在编译后会被擦除掉 ,变成原生一模一样的类型List<E>,导致无法重载.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java泛型总结(类型擦除、伪泛型、陷阱)

JDK1.5开始实现了对泛型的支持,但是java对泛型支持的底层实现采用的是类型擦除的方式,这是一种伪泛型。这种实现方式虽然可用但有其缺陷. 《Thinking in Java》的作者 Bruce E...

java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题

参考:java核心技术 一、Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型。为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉。正确理解泛型概念的...

java泛型 泛型的内部原理:类型擦除以及类型擦除带来的问题

一、Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型。为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉。正确理解泛型概念的首要前提是理解类型擦...

java泛型和反射的简单例子

public static void main(String[] args) { // 实例化这个类,泛型的类型定义为string,参数给字符串,得到的该类型为string。 fx fx1...

简单的封装了一个将java bean生成xml的一个工具类,运用了反射和泛型,重用性高。

package com.example.dbutil.utils; import java.io.StringWriter; import java.lang.reflect.Field; impo...

spring4泛型初探----一个小例子

泛型的出现,是为了让代码更规整。 例如 Set set=new HashSet<>(); set.add("abc"); set.add(123); //编译出错如果不用泛型,那set里面放什么都可...

关于枚举、反射、泛型的简单例子

一、枚举     枚举就是要让某个类型的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。定义枚举使     用的关键字是enum。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)