汎型の進化

1918 ワード

public class demo1 {
	public static void main(String[] args){
		ex1 ex1= new ex1(" Bana");
		System.out.println(ex1.getdate());
		ex2 ex2 =new ex2(24);
		System.out.println(ex2.getDate());
	}
}
class ex1{
	private String date;
	public ex1(String date){
		this.date=date;
	}
	public void setdate(String date){
		this.date=date;
	}
	public String getdate(){
		return date;
	}
}
class ex2{
	private int date;
	public ex2(int date){
		this.date=date;
	}
	public void setDate(int date) {
		this.date = date;
	}	
	public int getDate() {
		return date;
	}
}

以上のコードの欠点:異なるタイプのクラスを作成し、クラスが膨張し、再利用性が悪い
public class demo2 {
	public static void main(String[] args){
		ex ex1 =new ex(" Bana");
		System.out.println((String)ex1.getdate());
		ex ex2 =new ex("24");
		System.out.println((String)ex2.getdate());
	}
}
class ex{
	private Object date;
	public ex(Object date){
		this.date=date;
	}

	public void setdate(Object date){
		this.date=date;
	}
	public Object getdate(){
		return date;
	}
}

以上のコードはObjectを用いてすべてのタイプの親であり,任意のタイプを受け入れることができ,クラスの膨張問題を解決した.しかし、欠点:コンパイルが正常で、カリキュラムの実行に異常が発生します.
public class demo3 {
	public static void main(String[] args){
		fanxing<String> fx= new fanxing<String>();
		fx.setdate(" Bana");
		System.out.println(fx.getdate());
		
		fanxing<Integer> fx1= new fanxing<Integer>();
		fx1.setdate(24);
		System.out.println(fx1.getdate());
	}
}
// 
class  fanxing <T>{
	private T date;
	public fanxing(T date){
		this.date=date;
	}
	public fanxing() {
		// TODO  
	}
	public void setdate(T date){
		this.date=date;
	}
	public T getdate(){
		return date;
	}
}

以上の2つのコードの欠点からjava 1.5汎用的な特性の導入を開始
汎用型は、コンパイル時にタイプのセキュリティをチェックし、すべての強制タイプ変換が自動および暗黙的です.
汎用の原理は「タイプのパラメータ化」すなわちタイプをパラメータと見なし,すなわち操作するデータ型をパラメータと見なすことである.
汎用性は、コードの拡張性と再利用性を向上させることができます.