我正在阅读我的团队的现有代码库,我注意到mutableListOf
总是被声明为val
。在某些情况下,元素仅添加到mutableListOf
中一次。E.g
val jobList = mutableListOf<JobActivity>()
jobList.addAll(job.activities)
在其他场景中,元素以循环的形式添加到mutableListOf
。E.g
val jobList = mutableListOf<JobActivity>()
newJobList.filterScanType(retrieveJobType(JobContext.NEW)).forEach {
jobList.add(it)
}
既然列表在创建时没有初始化,为什么不将mutableListOf
声明为var
呢?网上找到的许多示例也遵循与val
相同的声明mutableListOf
的模式。
在所描述的两种场景中,val
和var
哪个最好使用
发布于 2019-06-20 23:59:08
我认为它被声明为val是因为列表将始终是相同的,唯一变化的是它的元素。你永远不会做这样的事情:
joblist = anotherList
例如:
data class Example(var name: String)
val exampleObject = Example("SomeName")
你仍然可以这样做:
exampleObject.name = "AnotherName"
但你不能这样做:
exampleObject = anotherObject
发布于 2019-06-21 00:19:10
由于其他答案和评论中给出的原因,val
更加惯用。
您说val没有实例化,但在示例代码中,它是实例化的。
val jobList = mutableListOf<JobActivity>()
是实例化空MutableList<JobActivity>
的工厂
使用这种模式(val
而不是var
,在声明时实例化)可以确保您的代码永远不会为jobList
找到一个未初始化或null值;编译器可以证明这一点。
发布于 2019-06-21 00:00:28
简而言之,没有规则,这取决于你
如果使用val
,则可以修改mutableList
,但不能重新分配
如果您需要将另一个列表重新赋值给同一变量,请使用var
。在大多数情况下,您并不需要它,这就是您的团队经常使用它的原因
https://stackoverflow.com/questions/56689761
复制相似问题