Dart - 類(靜態(tài)、泛型)

靜態(tài)

使用關(guān)鍵字 static 可以聲明類變量或類方法。

靜態(tài)變量

靜態(tài)變量(即類變量)常用于聲明類范圍內(nèi)所屬的狀態(tài)變量和常量:

class Queue {
  static const initialCapacity = 16;
  // ···
}

void main() {
  assert(Queue.initialCapacity == 16);
}

備忘??:靜態(tài)變量在其首次被使用的時候才被初始化。

靜態(tài)方法

靜態(tài)方法(即類方法)不能被一個類的實例訪問,同樣地,靜態(tài)方法內(nèi)也不可以使用this

class Point {
  num x, y;
  Point(this.x, this.y);

  static num distanceBetween(Point a, Point b) {
    var dx = a.x - b.x;
    var dy = a.y - b.y;
    return sqrt(dx * dx + dy * dy);
  }
}

void main() {
  var a = Point(2, 2);
  var b = Point(4, 4);
  var distance = Point.distanceBetween(a, b);
  assert(2.8 < distance && distance < 2.9);
  print(distance);
}

可以將靜態(tài)方法作為編譯時常量。例如,你可以將靜態(tài)方法作為一個參數(shù)傳遞給一個常量構(gòu)造函數(shù)。

泛型

為什么使用泛型?

泛型常用于需要要求類型安全的情況,但是它也會對代碼運行有好處:

  • 適當(dāng)?shù)刂付ǚ盒涂梢愿玫貛椭a生成。
  • 使用泛型可以減少代碼重復(fù)。
  • 提高代碼的可維護性和協(xié)同開發(fā)。

使用集合字面量

List、Set 以及 Map 字面量也可以是參數(shù)化的。定義參數(shù)化的 List 只需在中括號前添加 <type>;定義參數(shù)化的 Map 只需要在大括號前添加 <keyType, valueType>:

var names = <String>['小蕓', '小芳', '小民'];
var uniqueNames = <String>{'小蕓', '小芳', '小民'};
var pages = <String, String>{
  'index.html': '主頁',
  'robots.txt': '網(wǎng)頁機器人提示',
  'humans.txt': '我們是人類,不是機器'
};

使用類型參數(shù)化的構(gòu)造函數(shù)

在調(diào)用構(gòu)造方法時也可以使用泛型,只需在類名后用尖括號(<...>)將一個或多個類型包裹即可:

var nameSet = Set<String>.from(names);

下面代碼創(chuàng)建了一個鍵為 Int 類型,值為 View 類型的 Map 對象:

var views = Map<int, View>();

備忘??: 與 Java 不同的是,Java 中的泛型是類型 擦除 的,這意味著泛型類型會在運行時被移除。在 Java 中你可以判斷對象是否為 List 但不可以判斷對象是否為 List<String>。

使用泛型方法

起初 Dart 只支持在類的聲明時指定泛型,現(xiàn)在同樣也可以在方法上使用泛型,稱之為 泛型方法

T first<T>(List<T> ts) {
  // 處理一些初始化工作或錯誤檢測……
  T tmp = ts[0];
  // 處理一些額外的檢查……
  return tmp;
}

方法 first<T> 的泛型 T 可以在如下地方使用:

  • 函數(shù)的返回值類型 (T)。

  • 參數(shù)的類型 (List<T>)。

  • 局部變量的類型 (T tmp)。

你可以查閱使用泛型函數(shù)獲取更多關(guān)于泛型的信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容