Java 泛型学习四 自动擦除

Java 泛型学习一 泛型概念
Java 泛型学习二 泛型的限制
Java 泛型学习三 通配符
Java 泛型学习四 自动擦除
Java 泛型学习五 泛型擦除带来的不自然
Java 泛型学习六 泛型类型系统

泛型制动擦除是指如果在调用一个声明了泛型参数的类时不给出泛型参数的类型,系统会自动按照一定的规则来设置泛型参数的类型。这主要是为了实现新旧代码的兼容,使原来没有使用泛型的源代码一样可以在新版的Java中编译与运行。

自动擦除规则:

  • 若泛型参数没有限定范围,则系统自动使用Object类设置泛型参数的类型;
  • 若泛型参数有限定的范围,则使用限定的最宽类型来设置泛型参数的类型;

示例代码:

package net.oseye;

public class FanXing {
	public static void main(String[] args) {
		Apple appleStr=new Apple();
		appleStr.setColor("红色");
		
		SayColor(appleStr);
	}
	
	static void SayColor(Apple<? extends String> apple){
				System.out.println(apple.getColor());
	}
}

class Apple<T>{
	private T color;
	public void setColor(T color){
		this.color=color;		
	}
	public T getColor(){
		return this.color;		
	}
}

在使用Apple<T>时没有使用泛型,则类Apple<T>等价于:

class Apple{
	private Object color;
	public void setColor(Object color){
		this.color=color;		
	}
	public Object getColor(){
		return this.color;		
	}
}
原文地址:https://www.cnblogs.com/zhaiqianfeng/p/4618364.html