Dart中Map类实现代码位置及构造函数factory关键字作用问询
Dart Map类相关问题解答
方法实现找不到的原因
- Dart标准库中公开的
Map是抽象接口类,你在map.dart中看到的所有无实现体的方法,都是接口约定的声明,本身不包含具体实现逻辑:- 带
external关键字的external factory Map():说明该构造器的实现由Dart SDK的平台底层提供,不同运行平台(Dart VM、JavaScript、Wasm等)会提供对应平台优化后的实现,不会公开在顶层的map.dart文件中 V? operator [](Object? key)和void clear():属于Map接口定义的抽象方法,所有符合Map规范的子类(比如默认的LinkedHashMap、哈希表实现的HashMap、有序的SplayTreeMap等)都必须单独实现这两个方法,你需要到对应子类的源码中才能找到具体实现代码
- 带
Map构造器使用factory关键字的原因
- 首先
Map本身是抽象类,正常语法下无法直接被实例化,使用factory构造器可以绕开这个限制,给开发者提供统一的Map()调用入口 - factory构造器不需要每次调用都生成新的实例,SDK内部可以根据运行平台、参数场景返回最优的Map子类实例:比如默认调用
Map()返回的是保证插入顺序的LinkedHashMap实例,在特定场景下也可能返回其他优化过的Map子类,上层开发者不需要感知底层实现的差异 - 方便后续SDK迭代优化Map的底层实现,只要对外的调用接口不变,上层开发者的代码不需要做任何修改
内容的提问来源于stack exchange,提问作者san kim
相关产品推荐
相关产品推荐

