Java中范型的重载

问题: 什么是范型???

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

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

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

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

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

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

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

你可能感兴趣的:(java,概念格)