在Dart中,列表中的映射是否没有类型检查?

3
例如,如果您有以下列表:
List<Map<String,int>> list =  <Map<String,int>>[
    {"string1": 44},
    {"string2" : "string in place of int"}
];

或者

List<Map<String,int>> list =  new List<Map<String,int>>();
list.addAll([
    {"string1": 44},
    {"string2" : "string in place of int"}]
);

是否应该有一个“字符串代替整数”的警告?

3个回答

3

除非在checked mode下执行代码,否则Dart不使用类型。

当Dart未处于checked mode时(应该在生产环境中),没有类型、错误类型或正确类型都没有任何区别(无错误,也没有速度提升)。


2
为了从分析器或DartEditor中得到警告,您需要像这样编写它:
List<Map<String,int>> list =  <Map<String,int>>[
    <String,int>{"string1": 44},
    <String,int>{"string2" : "string in place of int"}
];

0
在Dart中,静态检查器并不会对每个可能的类型违规进行投诉,因为代码是正确的机会。在运行时,当执行非法操作时,会出现异常。
当我使用:
{"string2" : "string in place of int"}

我创建了一个映射:Map<dynamic,dynamic>,dynamic可以让静态检查器闭嘴。
Dart允许这段代码运行,因为向下赋值可能是有效的,而且Dart乐观地认为你知道自己在做什么。
所以我的Map可以是Map<String,int>,那么它就是正确的,否则会抛出异常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接