`
davidxiaozhi
  • 浏览: 236908 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java泛型类型擦除

 
阅读更多

 

先上一段代码,猜猜会出现的问题

 

 

	public void test(List<String> value){
		System.out.println("List<String> value");
	}
	public void test(List<Integer> value){
		System.out.println("List<Integer> value");
	}

 

 

很,不幸编译不通过,下面让我们来分析一下为什么。

 

真假泛型,早在java出现泛型之前,c#中存在泛型了,c#中的泛型无论在源码中还是编译后都是真实存在的(编译后是一个占位符),基于这种实现的泛型我们称之为真泛型。那么java呢,java的泛型只是存在源码中,javac编译后字节码中就被替换成原生类型,所以运行阶段List<String>与 List<Integer> 是同一类型,基于这种泛型实现的我们称之伪泛型。那么运行时类型是如何区分的呢,其实编译阶段在相应地方插入了强制转化类型代码。java中泛型实现方法称为泛型擦除。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics