为什么这段代码没有引发错误?飞镖混淆参数化列表
List<String> x;
void main() {
x = [1,23,3,423,2];
print(x);
}
很抱歉的新手问题,但我刚开始学习镖,我问这个,因为我的理解是,x
只能包含的String
清单,并应抛出一个异常,由于值不是列表的String
,但列表num
。这是一个错误,或?
为什么这段代码没有引发错误?飞镖混淆参数化列表
List<String> x;
void main() {
x = [1,23,3,423,2];
print(x);
}
很抱歉的新手问题,但我刚开始学习镖,我问这个,因为我的理解是,x
只能包含的String
清单,并应抛出一个异常,由于值不是列表的String
,但列表num
。这是一个错误,或?
这是可选的键入操作。
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>
)来验证您的代码。
在达特朗网站上阅读的好文章是关于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
}
飞镖类型是可选的不是静态的。所以在运行时,所有类型的annonations基本上被替换为var
只是一个另外:你也可以这样写:'无功富= [ '富', '酒吧'];'。 :) –
谢谢 - 我忘记了这个变种! –