1 /* 2 3 泛型:軟件工程中,我們不僅要創建一致的定義良好的API,同時也要考慮可重用性。 組件不僅能夠支持當前的數據類型,同時也能支持未來的數據類型,這在創建大型系統時為你提供了十分靈活的功能。 4 5 在像C#和Java這樣的語言中,可以使用泛型來創建可重用的組件,一個組件可以支持多種類型的數據。 這樣用戶就可以以自己的數據類型來使用組件。 6 7 8 通俗理解:泛型就是解決 類 接口 方法的復用性、以及對不特定數據類型的支持(類型校驗) 9 10 */ 11 12 13 //只能返回string類型的數據 14 15 // function getData(value:string):string{ 16 // return value; 17 // } 18 19 //同時返回 string類型 和number類型 (代碼冗余) 20 21 22 // function getData1(value:string):string{ 23 // return value; 24 // } 25 26 27 // function getData2(value:number):number{ 28 // return value; 29 // } 30 31 32 33 34 //同時返回 string類型 和number類型 any可以解決這個問題 35 36 37 // function getData(value:any):any{ 38 // return '哈哈哈'; 39 // } 40 41 42 // getData(123); 43 44 // getData('str'); 45 46 47 48 49 //any放棄了類型檢查,傳入什么 返回什么。比如:傳入number 類型必須返回number類型 傳入 string類型必須返回string類型 50 51 52 //傳入的參數類型和返回的參數類型可以不一致 53 // function getData(value:any):any{ 54 // return '哈哈哈'; 55 // } 56 57 58 59 60 // 泛型:可以支持不特定的數據類型 要求:傳入的參數和返回的參數一直 61 62 63 64 // T表示泛型,具體什么類型是調用這個方法的時候決定的 65 66 // function getData<T>(value:T):T{ 67 // return value; 68 // } 69 // getData<number>(123); 70 71 // getData<string>('1214231'); 72 73 74 // getData<number>('2112'); /*錯誤的寫法*/ 75 76 77 78 79 80 // function getData<T>(value:T):any{ 81 // return '2145214214'; 82 // } 83 84 // getData<number>(123); //參數必須是number 85 86 // getData<string>('這是一個泛型'); 87 88 89 90 91 92 93 94 95 // 泛型類:比如有個最小堆算法,需要同時支持返回數字和字符串 a - z兩種類型。 通過類的泛型來實現 96 97 98 /* 99 100 class MinClass{ 101 public list:number[]=[]; 102 add(num:number){ 103 this.list.push(num) 104 } 105 min():number{ 106 var minNum=this.list[0]; 107 for(var i=0;i<this.list.length;i++){ 108 if(minNum>this.list[i]){ 109 minNum=this.list[i]; 110 } 111 } 112 return minNum; 113 } 114 115 } 116 117 var m=new MinClass(); 118 119 m.add(3); 120 m.add(22); 121 m.add(23); 122 m.add(6); 123 124 m.add(7); 125 alert(m.min()); 126 127 */ 128 129 130 131 132 //類的泛型 133 134 class MinClas<T>{ 135 136 public list:T[]=[]; 137 138 add(value:T):void{ 139 140 this.list.push(value); 141 } 142 143 min():T{ 144 var minNum=this.list[0]; 145 for(var i=0;i<this.list.length;i++){ 146 if(minNum>this.list[i]){ 147 minNum=this.list[i]; 148 } 149 } 150 return minNum; 151 } 152 } 153 154 var m1=new MinClas<number>(); /*實例化類 並且制定了類的T代表的類型是number*/ 155 m1.add(11); 156 m1.add(3); 157 m1.add(2); 158 alert(m1.min()) 159 160 161 var m2=new MinClas<string>(); /*實例化類 並且制定了類的T代表的類型是string*/ 162 163 m2.add('c'); 164 m2.add('a'); 165 m2.add('v'); 166 alert(m2.min())