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烂笔头
您的关注将是我坚持的动力源泉,再次感谢。
相关文章
相关标签/搜索