Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 为什么一个动态值可以在不强制转换的情况下转换为另一个,而另一个则会失败?_Dart - Fatal编程技术网

Dart 为什么一个动态值可以在不强制转换的情况下转换为另一个,而另一个则会失败?

Dart 为什么一个动态值可以在不强制转换的情况下转换为另一个,而另一个则会失败?,dart,Dart,您可以在代码部分看到我所说的注释,在编写部分很难指出这里的代码片段,所以我在代码部分添加了它们 列表无法转换,但其他类型(如bool、int、String)可以使用内部强制转换 关键是dList是一个列表。类型dynamic是所有其他类型的顶级类型和超类型,它被具体化,因此您可以在运行时对其进行测试,而Java则在运行时删除类型参数。使用cast,您将创建一个新对象,即List实例,因此它可以是该类型变量的值 使用dString,您已经有了一个String类型的实例,因为它的计算结果就是这样一个

您可以在代码部分看到我所说的注释,在编写部分很难指出这里的代码片段,所以我在代码部分添加了它们

列表无法转换,但其他类型(如bool、int、String)可以使用内部强制转换

关键是dList是一个列表。类型dynamic是所有其他类型的顶级类型和超类型,它被具体化,因此您可以在运行时对其进行测试,而Java则在运行时删除类型参数。使用cast,您将创建一个新对象,即List实例,因此它可以是该类型变量的值

使用dString,您已经有了一个String类型的实例,因为它的计算结果就是这样一个实例,所以cast只是验证这确实是一个字符串

决不能使用投射省道来获取类型与起始点不同的对象,它只会检查现有对象的类型,并确认类型符合要求,或投掷。

检查此项
final dList = <dynamic> [];
final List<String> sList1 = dList;  // fails (can't implicitly cast)
final sList2 = dList.cast<String>(); // works (needs manual casting)

dynamic dString = '';
final String sString1 = dString; // works
final sString2 = dString as String; // works