我们为 Map 获得的实际实例是什么?
What is the actual instance we get for a Map?
如果我像这样创建一个Map
Map<String, dynamic> map = Map<String, dynamic>();
在文档中说,它 returns LinkedHashMap
/// Creates an empty [LinkedHashMap].
///
/// This constructor is equivalent to the non-const map literal `<K,V>{}`.
///
/// A `LinkedHashMap` requires the keys to implement compatible
/// `operator==` and `hashCode`.
/// It iterates in key insertion order.
external factory Map();
而LinkedHashMap
也是一个抽象class,我们不能在dart中为抽象class创建对象。
abstract class LinkedHashMap<K, V> implements Map<K, V> {
/// Creates an insertion-ordered hash-table based [Map].
///
我们在Map
构造函数中得到的实际实例是什么?
我使用的是 dart version 2.16.1 latest stable
What is the actual instance we get in Map Constructor?
答案是LinkedHashMap
。是具体的class,不是抽象的class。
implementers of Map
的另一个示例是 HashMap。
Map
默认构造函数是一个 factory constructor,它使用其默认构造函数生成 LinkedHashMap
。 LinkedHashMap
默认构造函数也是一个工厂构造函数,它创建了几个内部 类:
之一的对象
_InternalLinkedHashMap
_CompactLinkedIdentityHashMap
_CompactLinkedCustomHashMap
至于选择哪一种,那要看提供了什么样的equals
、hashCode
、isValidKey
方法。对于您调用 Map()
的情况,它将是第一个 _InternalLinkedHashMap
。
源代码
这是我提到的 类 和构造函数的最新版本(截至今天):
- 构造函数:hash_factories.dart
_InternalLinkedHashMap
: compact_hash.dart
_CompactLinkedIdentityHashMap
: compact_hash.dart
_CompactLinkedCustomHashMap
: compact_hash.dart
如果我像这样创建一个Map
Map<String, dynamic> map = Map<String, dynamic>();
在文档中说,它 returns LinkedHashMap
/// Creates an empty [LinkedHashMap].
///
/// This constructor is equivalent to the non-const map literal `<K,V>{}`.
///
/// A `LinkedHashMap` requires the keys to implement compatible
/// `operator==` and `hashCode`.
/// It iterates in key insertion order.
external factory Map();
而LinkedHashMap
也是一个抽象class,我们不能在dart中为抽象class创建对象。
abstract class LinkedHashMap<K, V> implements Map<K, V> {
/// Creates an insertion-ordered hash-table based [Map].
///
我们在Map
构造函数中得到的实际实例是什么?
我使用的是 dart version 2.16.1 latest stable
What is the actual instance we get in Map Constructor?
答案是LinkedHashMap
。是具体的class,不是抽象的class。
implementers of Map
的另一个示例是 HashMap。
Map
默认构造函数是一个 factory constructor,它使用其默认构造函数生成 LinkedHashMap
。 LinkedHashMap
默认构造函数也是一个工厂构造函数,它创建了几个内部 类:
_InternalLinkedHashMap
_CompactLinkedIdentityHashMap
_CompactLinkedCustomHashMap
至于选择哪一种,那要看提供了什么样的equals
、hashCode
、isValidKey
方法。对于您调用 Map()
的情况,它将是第一个 _InternalLinkedHashMap
。
源代码
这是我提到的 类 和构造函数的最新版本(截至今天):
- 构造函数:hash_factories.dart
_InternalLinkedHashMap
: compact_hash.dart_CompactLinkedIdentityHashMap
: compact_hash.dart_CompactLinkedCustomHashMap
: compact_hash.dart