gpt4 book ai didi

dart - 为什么我可以将 List 分配给 List

转载 作者:行者123 更新时间:2023-12-03 02:53:55 27 4
gpt4 key购买 nike

我对 dart 的类型检查如何工作感到困惑。如图,分配一般List<dynamic>List<String>没问题。这实质上意味着我可以分配该列表中的任何内容,而不仅仅是 String .这是为什么?

void main() {
List<String> a;
a = [1]; // pass
a = new List<int>(); // fail
a = 1; // fail
a = new List<String>(); // pass
a.add(1); // fail
}

最佳答案

dynamic类型很特殊。这真的意味着“关闭所有类型检查,我知道我在做什么”。

在您的示例中,您分配了一个 List<dynamic>实例到 List<String>多变的。静态类型检查器看到:List to list,没关系,而且类型参数是动态的,所以我根本不会检查,程序员必须知道他在做什么。

每当您使用 dynamic作为一种类型,或作为一种类型的一部分,您对打字的正确性承担全部责任。系统会让你为所欲为。

即使没有 dynamic ,Dart 类型系统不安全。这意味着您可以创建没有静态类型警告的程序,这些程序在运行时仍会因类型错误而失败。
实际上,大多数语言都存在这个问题,只要它们包含具有协变或逆变子类型的参数化类型。或 Actor 。

关于dart - 为什么我可以将 List<dynamic> 分配给 List<String>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com