为什么这个代码不抛出一个错误?
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>
)被用于由工具来验证代码。
一篇好文章对dartlang网站阅读是一个关于可选类型 。
编辑:其实,这也是关于列表一个有趣的问题。 如果您使用文字列表初始化列表(例如, []
那么你实际上是在创建一个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