重定向构造函数(Redirecting constructors)
有时候一个构造函数的目标仅仅是重定向到同一个类的另一个函数中。重定向构造函数体是空的,并在:
后面跟着另一个构造函数的调用。
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中返回对象:
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
。
而调用工厂构造函数其他和调用其他构造函数是一样的:
var logger = Logger('UI');
logger.log('Button clicked');
以上就是今天的dart小知识-构造函数知多少的内容了。
如果你觉得这篇文章对你有益,还请帮忙转发和点赞,万分感谢。
您的关注将是我坚持的动力源泉,再次感谢。
网友评论