1

为什么这段代码没有引发错误?

List<String> x;

void main() {
  x = [1,23,3,423,2];
  print(x);
}

很抱歉这个新手问题,但我刚开始学习飞镖,我问这个是因为我理解x只能包含一个列表String并且应该引发异常,因为值不是一个列表String而是一个列表num。这是一个错误,还是?

4

2 回答 2

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 网站上的一篇好文章是关于可选类型的。

编辑:实际上,这也是关于列表的一个有趣点。如果您使用文字列表(例如,[])初始化列表,那么您实际上是在创建一个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
}
于 2013-01-16T15:38:28.773 回答
0

Dart 类型是可选的,不是静态的。所以在运行时所有类型的注解基本上都被替换为var

于 2013-01-16T15:37:41.827 回答