Java中范型的重载

问题: 什么是范型???

答案:java中可以用T或其他大写字母代替一个未知的类型,例如 定义类的时候 class A<T>中的T就是一个范型,T可以代替任何类型或者类。

问题:为什么java的范型是一个假范型??

答案:因为java的代码在编译成class文件之后,会将范型给去掉。会用object代替范型。所以java的范型是假范型。
例如:
`
public (T) List<T> get(List<T> obj){
} 
编译之后变成:
public List<Object> get(List obj) {
}
`

问题:为什么java中用范型进行重载不可以??

例如代码如下:
class A {
	public void say(List<Integer> a) {
	}
	
	public void say(List<String> b) {
	}
}
上述代码,会报错,为什么呢???因为java在编译之后,会将范型给去掉,所以编译之后代码是如下:
class A {
	public void say(List a) {
	}
	
	public void say(List b) {
	}
}
两个方法是一摸一样的,而在java中同一个方法不能存在两个,所以会报错。

问题:为什么jdk1.6中返回值不同的两个范型的方法,可以同时存在??

例如代码如下:
class A {
	public Integer say(List<Integer> a) {
	return 0;
	}
	
	public String say(List<String> b) {
	return null;
	}
}
答案:因为java代码中确认唯一方法(特征签名)是根据方法名+参数顺序+参数类型,而在字节吗中确认唯一方法(特征签名)是根据返回值+方法名+参数顺序+参数类型+异常表。因为返回值不同,所以编译通过之后上面两个方法是唯一确认的。不过仅仅在jdk1.6中可以,其余版本编译不通过,会报错。因为在java代码中就会认为他们是一样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值