首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >mutableList应该声明为Val还是Val?

mutableList应该声明为Val还是Val?
EN

Stack Overflow用户
提问于 2019-06-20 23:54:51
回答 5查看 426关注 0票数 -1

我正在阅读我的团队的现有代码库,我注意到mutableListOf总是被声明为val。在某些情况下,元素仅添加到mutableListOf中一次。E.g

代码语言:javascript
复制
val jobList = mutableListOf<JobActivity>()
jobList.addAll(job.activities)

在其他场景中,元素以循环的形式添加到mutableListOf。E.g

代码语言:javascript
复制
val jobList = mutableListOf<JobActivity>()
newJobList.filterScanType(retrieveJobType(JobContext.NEW)).forEach {
    jobList.add(it)
}

既然列表在创建时没有初始化,为什么不将mutableListOf声明为var呢?网上找到的许多示例也遵循与val相同的声明mutableListOf的模式。

在所描述的两种场景中,valvar哪个最好使用

EN

回答 5

Stack Overflow用户

发布于 2019-06-20 23:59:08

我认为它被声明为val是因为列表将始终是相同的,唯一变化的是它的元素。你永远不会做这样的事情:

代码语言:javascript
复制
joblist = anotherList

例如:

代码语言:javascript
复制
data class Example(var name: String)

val exampleObject = Example("SomeName")

你仍然可以这样做:

代码语言:javascript
复制
exampleObject.name = "AnotherName"

但你不能这样做:

代码语言:javascript
复制
exampleObject = anotherObject
票数 4
EN

Stack Overflow用户

发布于 2019-06-21 00:19:10

由于其他答案和评论中给出的原因,val更加惯用。

您说val没有实例化,但在示例代码中,它是实例化的。

代码语言:javascript
复制
val jobList = mutableListOf<JobActivity>()

是实例化空MutableList<JobActivity>的工厂

使用这种模式(val而不是var,在声明时实例化)可以确保您的代码永远不会为jobList找到一个未初始化或null值;编译器可以证明这一点。

票数 2
EN

Stack Overflow用户

发布于 2019-06-21 00:00:28

简而言之,没有规则,这取决于你

如果使用val,则可以修改mutableList,但不能重新分配

如果您需要将另一个列表重新赋值给同一变量,请使用var。在大多数情况下,您并不需要它,这就是您的团队经常使用它的原因

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56689761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档