为什么数组是不变的,而列表是协变的?

2024-01-04

例如。为什么

val list:List[Any] = List[Int](1,2,3)

工作,但是

val arr:Array[Any] = Array[Int](1,2,3)

失败(因为数组是不变的)。这个设计决策背后的预期效果是什么?


因为否则它会破坏类型安全。 如果没有,您可以执行以下操作:

val arr:Array[Int] = Array[Int](1,2,3)
val arr2:Array[Any] = arr
arr2(0) = 2.54

并且编译器无法捕获它。

另一方面,列表是不可变的,因此您不能添加不可变的内容Int

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么数组是不变的,而列表是协变的? 的相关文章

随机推荐

  • JavaFX ComboBox CSS 样式

    我正在使用 JavaFX FXML 构建一个小型应用程序 并尝试实现一些简单的 CSS 以获得特定的样式 我对组合框元素有疑问 事实上 默认情况下它的颜色是灰色的 我想将其设置为白色 或透明 并保留边框 以匹配与文本字段相同的样式 所以我尝
  • iPhone 在 UITextField touch 上显示日期选择器

    我关注了这个线程 通过单击文本字段来选择日期 https stackoverflow com questions 7308754 datepicker by clicking on textfield 我导入了以下两个协议 interfac
  • Visual Studio 2022 TypeScript IntelliSense 在 17.2 中损坏

    我有几个 TypeScript 项目 其中 IntelliSense 不再正常工作 我怀疑它可能在 17 2 中被破坏 因为我昨天更新了版本 F12 去定义 大部分已经不再起作用了 如果我搜索所有引用 它会找到一堆引用 但实际的类定义被分类
  • 强制更新 Accurev 中的工作区

    Accurev中有没有命令可以强制更新我的工作区 直接用备份文件替换本地文件 并且不关心冲突文件 修改文件等 我真的很怀念 cvs 命令 cvs update C d 根据提问 我也有类似的问题 通常我只使用以下命令 accurev upd
  • Kafka 对同一主题和分区的多个生产者进行排序

    假设我有两个生产者 ProducerA 和 ProducerB 使用单个分区写入同一主题 每个制作人都在连续编写自己独特的事件 因此 如果 ProducerA 触发了 3 个事件 然后 ProducerB 触发了 3 个事件 我的理解是 K
  • 在 angularjs 中使用 json 漂亮的打印

    我怎样才能使用这个 json 漂亮的打印 http jsfiddle net KJQ9K http jsfiddle net KJQ9K 与 AngularJS 假设我的 JsonValue 是 a 1 b foo c false fals
  • PredicateBuilder 如何工作

    C in a Nutshell 有一个名为 PredicateBuilder 的免费类 它可以逐个构建可用的 LINQ 谓词here http www albahari com nutshell predicatebuilder aspx
  • 如何从命令行从闪存驱动器运行包中包含类的java程序?

    我有一项任务 必须在闪存驱动器中提交我的代码 我在 eclipse 中完成了所有编码并获取了所有输出 我尝试通过命令行运行它并且它有效 我将所有 java 文件和类文件复制到闪存驱动器 并通过命令行再次尝试 它在我的笔记本电脑上运行 但是当
  • 如何将 arrayformula 与似乎不支持 arrayformula 的公式一起使用?

    如果提供数组作为某些函数的正常标量参数的输入 例如 INDEX GCD GOOGLETRANSLATE OFFSET QUERY IMPORTRANGE AND 它不返回数组 即使由 ARRAYFORMULA 包装 它只获取数组中第一项的值
  • 这种线程间通信的方法安全吗?

    我有3个对象 继承自QObject 每个都包含一个单独的std list 每个对象都是在主 gui 线程 没有父线程 中创建的 然后被推送到它自己的线程 使用 Qt 的QObject moveToThread 每个线程都连接到一个 GUI
  • Google 在 Github 页面上找不到 Analytics 代码片段 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 一段时间以来 我一直无法让 Google Analytics 在我生成的 Github 页面上正常工作 我使用了 Google 提供的默认代码段 但我
  • pandas ols 导入损坏?

    我试图在 pandas 0 9 1 中执行 OLS 但出现此错误 ipdb gt foo ols y df y var 1 x df x var pool False ImportError No module named scikits
  • 如何使SQL Server 2008表的检查约束仅允许某些字符?

    我想在 SQL 2008 中为表创建一个检查约束 该约束允许使用 A Z 字符 不区分大小写 数字 连字符 点 空格和下划线 下面是我现在的表情 company code 不像 A Za z0 9 它满足除连字符之外的所有上述要求 我怎样才
  • Apache Tika 无法正确检测 MIME 类型

    我试图在使用inn上传文件时检测文件类型Apache Tika如下所示 static final List
  • 在 iframe 中设置 cookie - 不同的域

    我们将我们的网站作为 iframe 集成到在不同域上运行的另一个网站中 看来我们不能设置cookie 以前有人遇到过这个问题吗 有任何想法吗 由于您的内容是从远程域加载到 iframe 中 因此它被归类为第三方cookie 绝大多数第三方
  • Dexie 数据库超时变慢

    我正在将 Dexie DB 版本 2 0 4 与 Angular 8 和 Electron 一起使用 我意识到 在数据库中输入的数据越多 对其进行的查询越多 数据库调用就会变得越慢 我是一个 Dexie 菜鸟 不确定在发出某些请求后是否有办
  • 如何从 NLTK 导入和使用停用词列表?

    我已经导入了stopwords from nltk corpus 但我得到STOPWORDS is not defined错误 下面是我的代码 import nltk from nltk corpus import stopwords Cr
  • 如何在 Javascript 中以编程方式创建控制字符?

    在 Javascript 中我可以输入 u00A3 使用字符代码获取字符 我可以通过编程来执行此操作String fromCharCode parseInt 00A3 16 但我找不到对控制角色执行相同操作的方法 我可以在源代码中输入它们
  • 错误:$controller:ctrlreg 未注册名为“{0}”的控制器

    app js function use strict angular module app ngRoute ngCookies config config config inject routeProvider locationProvid
  • 为什么数组是不变的,而列表是协变的?

    例如 为什么 val list List Any List Int 1 2 3 工作 但是 val arr Array Any Array Int 1 2 3 失败 因为数组是不变的 这个设计决策背后的预期效果是什么 因为否则它会破坏类型安