当前位置: 首页 > 知识库问答 >
问题:

为什么我可以在静态编程语言中将MutableList实例化为val(并向其添加元素)?

马新觉
2023-03-14

我只是在学习静态编程语言的早期阶段,所以我播放了一段视频,展示了许多常见的静态编程语言习语:静态编程语言教程

就在视频的1:03:10点,演示者讨论了可变集合和不可变集合。正如您在视频中看到的,他创建了一个带有var关键字的可变列表和一个带有val关键字的不可变列表。我很好奇,如果我尝试将val与可变列表一起使用,会发生什么错误;我认为这是不允许的,这个想法会显示一条这样的信息,但它没有给我错误信息。然后我在可变列表中添加了一个元素,这也没有导致错误!当我显示MutableList的最后一个元素时,它显示了我添加的元素,因此它不仅没有给我一个错误,而且成功地将一个元素添加到了我认为是不可变的东西中。

为什么我的代码可以工作?我不敢相信像我这样的静态编程语言初学者在静态编程语言中发现了一个基本错误,所以一定有其他事情发生。有人能解释一下吗?

这是我的代码:

val list3: MutableList<Int> = mutableListOf(6,7,8) 
list3.add(5)
println("list3 last item: ${list3.last()}")

println()语句显示:

list3 last item: 5

共有2个答案

闻人飞白
2023-03-14

val表示值,因此您可以将该val分配给对象一次,这与Java中的Final关键字相同。当您再次尝试重新分配val时,将发生错误。

    val list3: MutableList<Int> = mutableListOf(6,7,8) 
    list3.add(5)
    println("list3 last item: ${list3.last()}")

在上面的示例中,您没有为列表3分配新对象,而只是修改/添加列表的新值。

    val list3: MutableList<Int> = mutableListOf(6,7,8) 
    list3 = mutableListOf(1,2,3)

在上面的示例中,由于我们试图分配一个新的可变列表实例,因此会出现错误

希望有帮助

吕学
2023-03-14

<代码>val仅表示变量本身无法重新分配。它没有说明变量中的对象是否可变。

你会得到一个错误,如果你试图做

 val list3: MutableList<Int> = mutableListOf(6,7,8)
 list3 = mutableListOf(1,2,3)   // cannot re-assign to val
 类似资料:
  • 我在静态编程语言中遇到了一件非常奇怪的事情。我有 作为变量,我应该能够重新分配他的值,但是当我这样做时 它给了我错误 无法重新分配Val 最奇怪的是,我用了几个星期这个代码,它总是有效的。当我更新到API 29时,它今天停止工作 这是我的

  • 是否可以在中的class中添加一个新的静态方法?通常,由于Kotlin Extensions,这样的事情在Kotlin中是可能的。 我已经尝试在一个名为的文件中执行以下操作: 但<code>数学。无法解析同伴。。。

  • 我刚刚开始使用抽象类,重写val和singeltons。但是,我刚刚遇到了一个非常奇怪的行为。我的目标是拥有一个抽象类,然后创建几个扩展该抽象类的singeltons。因为我需要某些变量,所以我创建了抽象val,然后可以在子类中覆盖它(而不是通过构造函数传递它们)。 所以我上了4节课: 主要活动: 实例: 对象 AClass: 输出: 在此之后,我意识到被覆盖可能直到执行 之后才会初始化。但后来我

  • 它与扩展函数有什么关系?为什么带有的是函数,而不是关键字? 这个主题似乎没有明确的留档,只有关于扩展的知识假设。

  • 问题内容: 在Python 2和Python 3中,代码: 作为错误返回。为什么会这样呢? PS:对于旧类,它可以按预期工作。 PPS:此行为是有意的(请参阅接受的答案)。作为一种变通办法,可以定义一个类级别,该类级别仅转发给另一个成员,并将此“普通”成员设置为每个实例的实现。 问题答案: 双下划线方法总是在类上查找,而不是实例上。请参阅 特殊方法查找新类 : 对于新型类,只有在对对象的类型(而不

  • 当我使用对我的数组进行排序时(此数组包含指向整数的指针),一个额外的(一个新元素)似乎被添加到数组中。我几乎可以肯定问题出在或中,因为在调用之前打印我的数组时,数据是正确的(只是未排序)。这是代码。 输出应该包含未排序的数组、已排序的数组,以及是否找到了查询。未排序的数组中没有,但排序后的数组中有一个;此外,排序结果中缺少编号(有趣的是,如果我对执行二进制搜索,它会告诉我位于索引)。 输出示例(用