Java学习笔记-泛型及类型擦除

在集合中,我们经常会使用到泛型,但是之前对泛型的机制不懂,学习了一下,做下笔记。

首先我们来看下集合使用泛型的例子

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("hi");
		list.add("hello");
		System.out.println(list.get(0));
		System.out.println(list.get(1));
	}
这段代码编译后会怎么样?看一下,反编译后的代码

  public static void main(String[] args)
  {
    List list = new ArrayList();
    list.add("hi");
    list.add("hello");
    System.out.println((String)list.get(0));
    System.out.println((String)list.get(1));
  }
反编译后的代码里已经没有泛型,被替换为原来的类型,并且在相应读取数据的地方,插入了强制转换代码。所以运行时,ArrayList<Integer>与ArrayList<String>就是相同的类型。泛型在java中,实际上是一颗语法糖,实现方式为类型擦除,是一种伪泛型。

我们来看以下两个方法

public class GenericTest {
	public void aMethod(List<Integer> list){
		System.out.println("List<Integer>");
	}
	
	public void aMethod(List<String> list){
		System.out.println("List<String>");
	}
}
会怎么样?编译不通过,因为类型擦除,这两个方法的参数相同,签名是一样的。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值