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