gpt4 book ai didi

generics - Dart 泛型类实例化

转载 作者:行者123 更新时间:2023-12-03 03:18:17 27 4
gpt4 key购买 nike

在 Dart 中,这两个实例化是等价的吗?

//version 1
Map<String, List<Component>> map = new Map<String, List<Component>>();

//version 2
Map<String, List<Component>> map = new Map(); //type checker doesn't complain

使用版本 2 是否有任何问题(我更喜欢它,因为它不那么冗长)?

请注意,我知道我可以使用:
var map = new Map<String, List<Component>>();

但这不是我要面对这个问题的重点。谢谢。

最佳答案

不,它们不是等效的,实例化在运行时类型上有所不同,并且您可能会在使用运行时类型的代码中遇到意外——比如类型检查。
new Map()new Map<dynamic, dynamic>() 的快捷方式,这意味着“映射任何你想要的”。

测试稍微修改的原始实例:

main(List<String> args) {
//version 1
Map<String, List<int>> map1 = new Map<String, List<int>>();
//version 2
Map<String, List<int>> map2 = new Map(); // == new Map<dynamic, dynamic>();

// runtime type differs
print("map1 runtime type: ${map1.runtimeType}");
print("map2 runtime type: ${map2.runtimeType}");

// type checking differs
print(map1 is Map<int, int>); // false
print(map2 is Map<int, int>); // true

// result of operations the same
map1.putIfAbsent("onetwo", () => [1, 2]);
map2.putIfAbsent("onetwo", () => [1, 2]);
// analyzer in strong mode complains here on both
map1.putIfAbsent("threefour", () => ["three", "four"]);
map2.putIfAbsent("threefour", () => ["three", "four"]);

// content the same
print(map1);
print(map2);
}

更新 1: DartPad 中的代码和玩。

update2: 似乎强模式将来会提示 map2 实例化,见 https://github.com/dart-lang/sdk/issues/24712

关于generics - Dart 泛型类实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39185125/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com