Dart中如何区分同名的类成员与全局变量?
Dart名称歧义问题的其他解决方法
你遇到的问题是全局函数user()与类Foo的成员变量user同名,在构造函数初始化列表中,Dart会优先将user()解析为成员变量(而非全局函数),导致调用失败。除了将全局元素移到其他模块并导入的方法外,还有以下几种可行方案:
1. 重命名全局函数或成员变量
这是最直接的解决方式,通过修改其中一方的名称消除冲突:
// 重命名全局函数 String getUser() { return ""; } class Foo { String user; Foo() : user = getUser(); // 无歧义调用 } void main() {}
或者:
String user() { return ""; } class Foo { String username; // 重命名成员变量 Foo() : username = user(); } void main() {}
2. 将全局函数赋值给临时变量
提前保存全局函数的引用,在初始化列表中通过临时变量调用:
String user() { return ""; } // 保存全局函数的引用 final _globalUser = user; class Foo { String user; Foo() : user = _globalUser(); // 通过临时变量调用全局函数 } void main() {}
3. 将全局函数封装为类的静态方法
把全局函数放到一个类中作为静态方法,通过类名调用,明确区分成员变量:
class GlobalFunctions { static String user() { return ""; } } class Foo { String user; Foo() : user = GlobalFunctions.user(); // 通过类名调用静态方法 } void main() {}
4. 使用当前库的前缀调用全局函数
给当前文件声明库名,通过库前缀明确调用全局函数:
library my_app; String user() { return ""; } class Foo { String user; Foo() : user = my_app.user(); // 通过库前缀调用全局函数 } void main() {}
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

