为什么这段代码没有引发错误?
List<String> x;
void main() {
x = [1,23,3,423,2];
print(x);
}
很抱歉新手问题,但我刚开始学习飞镖,我问这是因为我的理解是x
只能包含String
的列表,并且应该因为值不是String
的列表,而是num
的列表。这是一个错误,还是?
答案 0 :(得分:4)
这是可选的输入操作。
var x; // same as List<String> x
List<String> y;
main() {
x = [1,2,3,4];
y = x; // valid
x = y; // valid
print(x); // [1,2,3,4]
print(y); // [1,2,3,4]
}
无论您指定List<String>
还是var
,您的代码都会执行相同的操作。工具使用类型注释(List<String>
)来验证您的代码。
关于dartlang网站的一篇好文章是关于optional types的文章。
编辑:实际上,这也是关于列表的有趣观点。如果使用文字列表初始化列表(例如,[]
),那么实际上是在创建List()
,例如:
main() {
var x = new List();
var y = [];
print(x is List); // true
print(y is List); // true
}
但是,如果您想要使用泛型的类型化列表,则必须使用构造函数语法,例如:
main() {
var x = new List<String>();
print(x is List); // true
print(x is List<String>); // true
print(x is List<num>); // false
}
答案 1 :(得分:0)
Dart类型是可选的而不是静态的。因此,在运行时,所有类型的annonations基本上都被var