Dart 程式設計 - 泛型



Dart 是一種可選型別語言。Dart 中的集合預設情況下是異構的。換句話說,單個 Dart 集合可以容納各種型別的值。但是,可以使 Dart 集合儲存同構的值。可以使用泛型概念來實現此目的。

使用泛型會對集合中可以包含的值的資料型別施加限制。此類集合被稱為型別安全的集合。型別安全是程式設計功能,它確保記憶體塊只能包含特定資料型別的資料。

所有 Dart 集合都透過泛型支援型別安全實現。一對包含資料型別的尖括號用於宣告型別安全的集合。宣告型別安全集合的語法如下所示。

語法

Collection_name <data_type> identifier= new Collection_name<data_type> 

List、Map、Set 和 Queue 的型別安全實現如下所示。上述所有集合型別的實現也支援此功能。

示例:泛型列表

void main() { 
   List <String> logTypes = new List <String>(); 
   logTypes.add("WARNING"); 
   logTypes.add("ERROR"); 
   logTypes.add("INFO");  
   
   // iterating across list 
   for (String type in logTypes) { 
      print(type); 
   } 
}

它應該產生以下輸出

WARNING 
ERROR 
INFO

嘗試插入除指定型別以外的值將導致編譯錯誤。以下示例說明了這一點。

示例

void main() { 
   List <String> logTypes = new List <String>(); 
   logTypes.add(1); 
   logTypes.add("ERROR"); 
   logTypes.add("INFO"); 
  
   //iterating across list 
   for (String type in logTypes) { 
      print(type); 
   } 
} 

它應該產生以下輸出

1                                                                                     
ERROR                                                                             
INFO

示例:泛型集合

void main() { 
   Set <int>numberSet = new  Set<int>(); 
   numberSet.add(100); 
   numberSet.add(20); 
   numberSet.add(5); 
   numberSet.add(60);
   numberSet.add(70); 
   
   // numberSet.add("Tom"); 
   compilation error; 
   print("Default implementation  :${numberSet.runtimeType}");  
   
   for(var no in numberSet) { 
      print(no); 
   } 
} 

它應該產生以下輸出

Default implementation :_CompactLinkedHashSet<int> 
100 
20 
5 
60 
70

示例:泛型佇列

import 'dart:collection'; 
void main() { 
   Queue<int> queue = new Queue<int>(); 
   print("Default implementation ${queue.runtimeType}");  
   queue.addLast(10); 
   queue.addLast(20); 
   queue.addLast(30); 
   queue.addLast(40); 
   queue.removeFirst();  
   
   for(int no in queue){ 
      print(no); 
   } 
}

它應該產生以下輸出

Default implementation ListQueue<int> 
20 
30 
40

泛型對映

型別安全的對映宣告指定了以下資料型別:

語法

Map <Key_type, value_type>

示例

void main() { 
   Map <String,String>m={'name':'Tom','Id':'E1001'}; 
   print('Map :${m}'); 
} 

它應該產生以下輸出

Map :{name: Tom, Id: E1001}
廣告