我在以下示例中继续看到对_internal的引用:
class Symbol {
final String name;
static Map<String, Symbol> _cache;
factory Symbol(String name) {
if (_cache == null) {
_cache = {};
}
if (_cache.containsKey(name)) {
return _cache[name];
} else {
final symbol = new Symbol._internal(name);
_cache[name] = symbol;
return symbol;
}
}
Symbol._internal(this.name);
}
我从代码中收集到它是一个私有的构造函数。最后一行Symbol._internal(this.name);
似乎有点令人困惑,因为它似乎是类体内的一个语句而不是方法体内,这使我相信它实际上是没有方法体的内部构造函数定义。
我的假设是否正确?
答案 0 :(得分:31)
_internal 构造只是一个通常给予该类私有的构造函数的名称(该名称不需要 ._ internal ,您可以创建一个私有构造函数使用任何 Class._someName 构造)。
例如,以下代码仅允许您使用缓存构造函数从类外部创建新人:
class Person {
final String name;
static Map<String,Person> _cache;
factory Person(String name) {
if(_cache === null) {
_cache = new Map<String,Person>();
}
if(_cache[name] === null]) {
_cache[name] = new Person._internal(name);
}
return cache[name];
}
Person._internal(this.name);
}
通常,Dart会将任何 _construction 视为包含它的类或库的私有。例如,您可以定义为这样的全局函数:
_globalToThisLibaryOnly() {
print("can only be called globally within this #library");
}
可以从定义它的库中的任何文件中调用。