Dart 中的混合类型列表

Fab*_*uso 3 list dart

在 Dart 中编译

var  data = ["abcd", 34, "ef", false];
int n = data[1];
print(n*2); // -> 68
Run Code Online (Sandbox Code Playgroud)

我认为列表元素应该都是相同类型的。A) 中不存在从 int 到 string 或从 bool 到 string 的隐式转换:

 print(data[1] is int);    // -> true
 print(data[3] is bool);   // -> true
 print(data[1] is String); // -> false
Run Code Online (Sandbox Code Playgroud)

编辑:正如 Mattia 指出的,以下几行中的真正错误与交换列表初始化中的元素无关,而是与从 A) 复制/粘贴到 B) 留下相同的索引 ([1])

这无法编译 “abcd”与 34 交换):

var  data = [34, "abcd", "ef", false]; // -> type error
int n = data[1]; //EDIT: this is a non sense, should be data[0] (no error generated)
print(n*2);  
Run Code Online (Sandbox Code Playgroud)

可重复的飞镖板

为什么?某种替代原则在起作用吗?

Mat*_*tia 5

如果您希望列表仅接受一种类型,您需要添加generic type例如:

var  data = <int>["abcd", 34, "ef", false]; // -> Error
Run Code Online (Sandbox Code Playgroud)

默认情况下,如果您不添加一个,则将使用“最常见类型”(在本例中为对象),并且它将接受所有变量类型。

第二个示例确实可以编译,但会给出运行时错误,因为data[1]不是 anint而是 aString