Dart中的混合类型列表

时间:2019-06-21 18:28:50

标签: list dart

可以在Dart中编译

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

我认为列表元素应该全部属于同一类型。并且在A)中没有从int到字符串或从bool到字符串的隐式转换:

 print(data[1] is int);    // -> true
 print(data[3] is bool);   // -> true
 print(data[1] is String); // -> false

编辑:正如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);  

Reproducible DartPad

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

1 个答案:

答案 0 :(得分:-1)

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

var  data = <int>["abcd", 34, "ef", false]; // -> Error

默认情况下,如果您不添加一个dynamic,它将被使用,它将接受所有变量类型。

第二个示例确实进行了编译,但是由于data[1]不是int而是String

而给出了运行时错误