有时候一个构造函数的目标仅仅是重定向到同一个类的另外一个函数中。重定向构造函数体是空的,并在:
后面跟着另外一个构造函数的调用。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);
}
复制代码
若是你的类产生的对象永不改变,你能够把这些对象变成编译时常量。为了达到这个目的,定义一个 const
构造函数 以保证全部的实例变量都是final
。函数
class ImmutablePoint {
static final ImmutablePoint origin =
const ImmutablePoint(0, 0);
final num x, y;
const ImmutablePoint(this.x, this.y);
}
复制代码
在实现一个构造函数时候使用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