日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dart系列之:dart类中的泛型

發布時間:2024/2/28 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dart系列之:dart类中的泛型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 簡介
  • 為什么要用泛型
  • 怎么使用泛型
    • 類型擦除
    • 泛型的繼承
    • 泛型方法
  • 總結

簡介

熟悉JAVA的朋友可能知道,JAVA在8中引入了泛型的概念。什么是泛型呢?泛型就是一種通用的類型格式,一般用在集合中,用來指定該集合中應該存儲的對象格式。

有了泛型可以簡化我們的編程,并且可以減少錯誤的產生,非常的方便。

dart語言中也有泛型。一起來看看吧。

為什么要用泛型

使用泛型的主要目的是保證類型安全,比如我們有一個List,然后只希望List中保存String類型,那么在dart中可以這樣指定:

var stringList = <String>[]; stringList.addAll(['jack ma', 'tony ma']); stringList.add(18); // 報錯

那么在使用的過程中,只能向stringList中添加字符串,如果向其添加數字,則會報錯,從而保證List中類型的一致性。

巧妙的使用泛型還能夠減少我們的代碼量,因為泛型可以代表一類通用的類型。

比如,在學校中,我們有寢室,寢室是有男女之分的,那么對應男生來說有這樣的定義:

abstract class BoyRoom {Boy getByName(String name); }

對于女生來說有這樣的定義:

abstract class GirlRoom{Girl getByname(String name); }

事實上,兩者本質上沒太大區別,只是參數或者返回值的類型發生了變化,那么我們可以這樣寫:

abstract class Room<T>{T getByname(String name); }

從而簡化了代碼的使用。

怎么使用泛型

泛型一般使用大寫的單個字符來表示,通常來說是E, T, S, K 和 V等。

泛型最常見的使用地方是集合中,比如List, set 和 map中:

var listExample = <String>['jack ma', 'tony ma']; var setExamples = <String>{'jack ma', 'tony ma'}; var mapExamples = <String, String>{'name1': 'jack ma','name2': 'tony ma', };

泛型還可以用在這些集合類的構造函數中,如下:

var stringMap = Map<String, String>();

表示構造出來的集合中,應該包含對應的類型。

類型擦除

雖然JAVA中也有泛型,但是JAVA中的泛型有一個類型擦除的特點。什么時候類型擦除呢?類型擦除就是指泛型指定的類型,只在編譯的時候生效,而在運行時是沒有泛型的概念的。

對于一個List 來說,JAVA在運行時,只能判斷對象是不是List,而不能判斷對象是不是List。

dart就和java不一樣了,dart在運行時能夠攜帶類型信息,也就是說,在dart中可以判斷一個對象是不是List。

var stringList = <String>[]; stringList.addAll(['jack ma', 'tony ma']); print(names is List<String>); // true

泛型的繼承

使用泛型的目的是限制參數的類型,所以我們通常會指定泛型的父類,以限制泛型的類型范圍:

class Room<T extends Student> {}class Boy extends Student {...}

在使用的過程中,可以傳入Student本身,也可以傳入Student的子類Boy,還可以不傳:

var student = Room<Student>(); var boy = Room<Boy>(); var studentDefault = Room();

泛型方法

dart中的泛型除了可以用在class中以外,還可以用在方法中:

T doSomething<T>(List<T> list) {T result = list[0];return result; }

方法中指定的泛型可以用在返回類型、參數和方法中的本地變量類型中。

總結

以上就是dart中泛型和其使用的介紹。

本文已收錄于 http://www.flydean.com/08-dart-generics/

最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程序那些事」,懂技術,更懂你!

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的dart系列之:dart类中的泛型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。