Flutter 为什么Dart中的类型检查如此奇怪?

Flutter 为什么Dart中的类型检查如此奇怪?,flutter,generics,dart,typechecking,compile-time-type-checking,Flutter,Generics,Dart,Typechecking,Compile Time Type Checking,给定代码 List<int> rawList = [0, 1, 2]; BuiltList<int> list = rawList.map((n) => n * 2); List-rawList=[0,1,2]; BuiltList=rawList.map((n)=>n*2); 编译成功,但在运行时失败,出现错误 类型“MappedListIterable”不是类型的子类型 “建筑列表” 那么为什么它不会在编译阶段崩溃呢?请解释一下,在C#和Kotlin之后,我

给定代码

List<int> rawList = [0, 1, 2];
BuiltList<int> list = rawList.map((n) => n * 2);
List-rawList=[0,1,2];
BuiltList=rawList.map((n)=>n*2);
编译成功,但在运行时失败,出现错误

类型“MappedListIterable”不是类型的子类型 “建筑列表”


那么为什么它不会在编译阶段崩溃呢?请解释一下,在C#和Kotlin之后,我无法理解。

.map
返回一个
Iterable
,它不适合您的
列表。你需要用
.toList()

Iterable
转换成一个
列表,该代码实际上给了我编译时错误(至少IDE表明它是错误的)
BuildList
的声明是什么?@BambinoUA它来自build\u集合是的,列表是Iterable,因此,列表可以用在任何你想要的地方。但您有另一个方向:您希望Iterable的行为类似于列表。不行。因此需要额外的.toList()。@BambinoUA我猜这不会破坏Liskov替换Principle@RandalSchwartz谢谢,但我理解错误的原因。我的问题是为什么这是一个运行时错误而不是编译时错误。也许NNBD中有更好的执行方法。