Dart小知識-- 構造函數知多少?

重定向構造函數(Redirecting constructors)

有時候一個構造函數的目標僅僅是重定向到同一個類的另外一個函數中。重定向構造函數體是空的,並在:後面跟着另外一個構造函數的調用。bash

class Point {
  num x, y;

  // The main constructor for this class.
  Point(this.x, this.y);

  // Delegates to the main constructor.
  Point.alongXAxis(num x) : this(x, 0);
}
複製代碼

常量構造函數 (Constant constructors)

若是你的類產生的對象永不改變,你能夠把這些對象變成編譯時常量。爲了達到這個目的,定義一個 const構造函數 以保證全部的實例變量都是final函數

class ImmutablePoint {
  static final ImmutablePoint origin =
      const ImmutablePoint(0, 0);

  final num x, y;

  const ImmutablePoint(this.x, this.y);
}
複製代碼

工廠構造函數(Factory constructors)

在實現一個構造函數時候使用factory關鍵字能夠作到沒必要每次都建立一個新的類實例。好比, 一個工廠構造函數能夠能會返回cache的實例, 或者一個子類型。
下例中表示工廠構造函數如何從cache中返回對象:ui

class Logger {
  final String name;
  bool mute = false;

  // _cache is library-private, thanks to
  // the _ in front of its name.
  static final Map<String, Logger> _cache =
      <String, Logger>{};

  factory Logger(String name) {
    if (_cache.containsKey(name)) {
      return _cache[name];
    } else {
      final logger = Logger._internal(name);
      _cache[name] = logger;
      return logger;
    }
  }

  Logger._internal(this.name);

  void log(String msg) {
    if (!mute) print(msg);
  }
}
複製代碼

注意: 工廠構造函數不能訪問this
而調用工廠構造函數其餘和調用其餘構造函數是同樣的:this

var logger = Logger('UI');
logger.log('Button clicked');
複製代碼

以上就是今天的dart小知識-構造函數知多少的內容了。spa


若是你以爲這篇文章對你有益,還請幫忙轉發和點贊,萬分感謝。
code

Flutter爛筆頭
您的關注將是我堅持的動力源泉,再次感謝。
相關文章
相關標籤/搜索