Dart中的泛型

2021-09-28 12:03:23 字數 2352 閱讀 5471

一. 什麼是泛型

泛型是程式語言的一種特性。允許程式設計師在強型別程式語言中編寫**時定義一些可變部分,那些部分在使用前必須作出指明。

從字面的意思理解來看,泛型,泛就是模糊、暫不確定暫定的意思。可以這樣理解,使用泛型就是定義的乙個型別,型別暫不確定,給使用給乙個佔位符給代替,在使用的時候可以給確定其定義的型別。

語法:

collection_name identifier= new collection_name
按照慣例,型別變數有單字母名稱,例如e、t、s、k和v。

e, t, k, v是泛型中常用的幾個名稱,實際上定義泛型時完全可以不使用它們。不過這幾個字母用得人多了,也就有了可讀性上的意義,這樣可以更好的進行協作。

二. 為什麼使用泛型

泛型通常是為了型別安全而必需的,但是它們比僅僅允許您的**執行有更多的好處:

var names = new list();   

names.addall([『seth』,』kathy』,』lars』]);

//...

names.add(42); //在除錯模式中失敗 (在生產模式中成功).

泛型可以減少**重複。

// 官網**

abstract class objectcache

abstract class stringcache

// 上面兩個類,使用泛型可以精簡為乙個類

abstract class cache

三. 泛型方法

泛型方法可以約束乙個方法使用同型別的引數、返回同型別的值,可以約束裡面的變數型別。

void setdata(string key, t value)

" + " value=$");

}t getdata(t value)

main(listargs)

四. 泛型類

宣告泛型類,比如宣告乙個 array 類,實際上就是 list 的別名,而 list 本身也支援泛型的實現。

class array

get value }

main(listargs)

五. 泛型介面

下面宣告了乙個 storage 介面,然後 cache 實現了介面,能夠約束儲存的 value 的型別:

abstract class storage

class cacheimplements storage

@override

void set(string key, t value) }

main(listargs)

); ch2.get("ptbird");

// ch2.set("name", "23"); // type 'string' is not a subtype of type 'map' of 'value'

// 執行結果:

// set successed!

// 123

// set successed!

// }

六. 其他

1.判斷泛型物件的型別

可以使用is表示式來判斷泛型物件的型別,如:

main(listargs)

2.用於集合型別

list和map字面量也是可以引數化的:

void main()

; // 使用構造函式引數化

var animallist = list();

var animalmap2 = map();

animallist.addall(['bird', 'dog']);

// 轉換成set時,需要指定型別

var animalset = set.from(animallist);

// 可以直接判定型別

print(animallist is list); // true

}

3.建構函式中的泛型

在呼叫建構函式時,可以在類名後使用<…>來指定具體型別,如:

// 建構函式泛型

class phone

void main()

4.限制泛型引數型別

當實現乙個泛型時,如果需要限制它引數的型別,可以使用extends關鍵字。

class footmassage

}// 泛型限制

class massage

void main()

Dart 中泛型 泛型方法 泛型類 泛型介面

泛型就是解決類 介面 方法的復用性以及對不特定資料的支援 void main 定義乙個泛型方法 t printdata t value running dart users zhoujian dartdemo demo.dart 2zhoujian done exited with code 0 i...

Dart語言學習 十四 Dart泛型

什麼是泛型?通俗理解 泛型就是解決 類 介面 方法的復用性 以及對不特定資料型別的支援 型別校驗 如下 只能返回string型別的資料string getdata string value 如下 同時支援返回 string型別 和int型別 但是這麼些造成 冗餘string getdata1 str...

Dart基礎 泛型和庫

如果你看過api文件的基本型別陣列和列表,你會發現實際上所有都是泛型,使用泛型可以提高 的可讀性 var names new list names.addall seth kathy lars 檢查模式編譯失敗,生產模式編譯成功 names.add 42 使用泛型的另乙個原因是減少 重複,泛型可以建...