2012-06-20 37 views
4

我一直看到引用像下面的示例来_internal:_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);似乎有点令人困惑,因为它似乎是类体内的声明,而不是方法体内的声明,导致我相信它实际上是没有方法体的内部构造函数定义。

我的假设是否正确?

回答

12

_internal建设只是一个名字经常给那些普里瓦对类构造函数(名字不被._internal你可以使用任何Class._someName建设创建一个私有构造要求) 。

例如,下面的代码只允许使用一个缓存构造函数来创建从类以外的新人数:

class Person { 
    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); 

    final String name; 
    static Map<String,Person> _cache; 
} 

一般飞镖胎面任何_construction私人要么类或包含它的库。例如,您可以定义为这样一个全球性的功能:

_globalToThisLibaryOnly() { 
    print("can only be called globally within this #library"); 
} 

可以从被定义它的图书馆内源的任何文件被调用。

+1

再次感谢拉尔斯。这有很大帮助。还有一些我不完全理解的东西,比如,构造函数可以有一个方法体呢?定义为final的类成员只能在构造函数的参数列表中设置,而不能在构造函数体中设置?这些仍然让我感到困惑。 –