Dart 泛型
泛型方法 泛型類 泛型接口
泛型的理解:泛型就是解決 類 接口 方法的複用性、以及對不特定數據類型的支持(類型校驗)
場景,如果我們不指定類型傳入參數,返回值的類型就得是這個類型:
// 1. 對傳入參數和返回值 進行校驗
T getData<T>(T value){
return value;
}
// 2. 對傳入參數進行校驗 和 返回值不校驗
getData<T>(T value){
return value;
}
void main(){
getData<String>('hello'); // hello
getData<int>(123); // 123
}
場景,列表數組類型
List list = new List<int>();
list.add(123); // ok
list.add('hello'); // error
場景,自定義一個泛型類
class PrintClass<T>{
List list = new List<T>();
void add(T value){
this.list.add(value);
}
void printInfo(){
for(var i=0;i<this.list.length;i++){
print(this.list[i]);
}
}
}
void main(){
// normal
PrintClass p = new PrintClass();
p.add(123);
p.add('xxx'); // ok
print(p.list);
// T int class
PrintClass p1 = new PrintClass<int>();
p1.add(123);
p1.add('xxx'); // error
print(p1.list);
}
Dart泛型接口
實現數據緩存功能,有文件緩存,和內存緩存;文件緩存和內存緩存按照接口的約束來實現
- 定義一個泛型接口 約束實現它的子類必須有 getByKey(key) 和 setByKey(key, value)
- 要求setByKey的時候value的類型和實例化子類的時候啊指定類型一致
abstract class Cache<T>{
getByKey(String key);
void setByKey(String key, T value);
}
// 文件緩存
class FileCache<T> implements Cache<T> {
@override
getByKey(String key){
return null;
}
@override
void setByKey(String key, T value){
print("文件緩存: key=${key} value=${value} 寫入文件中");
}
}
// 內存緩存
class MemoryCache<T> implements Cache<T> {
@override
getByKey(String key){
return null;
}
@override
void setByKey(String key, T value){
print("內存緩存: key=${key} value=${value} 寫入內存中");
}
}
void main(){
MemoryCache m = new MemoryCache<String>();
m.setByKey('index', '首頁數據'); // ok String
FileCache f = new FileCache<Map>();
// f.setByKey('index', 123); // error int not Map
// f.setByKey('index', 'hello'); // error string not Map
f.setByKey('index', {"name":"cat","age":25}); // ok Map
}
Dart 庫
自定義庫 系統庫 第三方庫
1. 我們自定義的庫
import "lib/xxx.dart"
2.系統內置的庫
import 'dart:math';
import 'dart:io';
import 'dart:convert';
3. Pub包管理系統中的庫
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter
(1) 需要在自己項目根目錄新建一個 pubspec.yaml
(2) 在pubspec.yaml文件 然後配置名稱、描述、依賴等信息
(3) 然後運行 pub get 獲取包下載到本地
(4) 項目中引入庫 import 'package:http/http.dart' as http; 可以參看文檔