Dart-静态类型列表中的值

lou*_*luo 3 dart dartium dart-editor

为什么这不是Dart中的错误?

List<String> listA = ['aa', 1, 'cc']; //not compile time error, not run time error??
Run Code Online (Sandbox Code Playgroud)

我正在使用Dart编辑器。

Ale*_*uin 5

写作List<String> listA = ['aa', 1, 'cc'];就像写作List<String> listA = <dynamic>['aa', 1, 'cc'];。该runtimeType['aa', 1, 'cc']就是List这与类型标注兼容List<String>你使用。

如果要定义一个列表,String以在编辑器中显示警告,并在运行时显示错误,则应首选:

List<String> listA = <String>['aa', 'cc'];
// or
final listA = <String>['aa', 'cc'];
Run Code Online (Sandbox Code Playgroud)

为了更好地理解这里的一些示例:

print((['aa', 1, 'cc']).runtimeType);       // List
print((['aa', 'cc']).runtimeType);          // List
print((<dynamic>['aa', 'cc']).runtimeType); // List
print((<String>['aa', 'cc']).runtimeType);  // List<String>

List<int> l1 = ['aa', 1, 'cc'];         // ok
List<int> l2 = ['aa', 'cc'];            // ok
List<int> l3 = <dynamic>['aa', 'cc'];   // ok
List<int> l4 = <String>['aa', 'cc'];    // warning in editor + runtime error
Run Code Online (Sandbox Code Playgroud)