private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>()
两者都是可变列表,那么两个关键字mutableListOf
或的意义是ArrayList
什么?
或有什么重大区别?
Answers:
两者之间的唯一区别是传达您的意图。
当您编写时val a = mutableListOf()
,您说的是“我想要一个可变列表,并且我并不特别在意实现”。相反,在编写时,val a = ArrayList()
您是在说“我特别想要一个ArrayList
”。
实际上,在当前Kotlin编译为JVM的实现中,调用mutableListOf
将产生ArrayList
,并且行为没有区别:列表一旦建立,所有行为将相同。
现在,让我们说Kotlin的将来版本将更mutableListOf
改为返回不同类型的列表。
Kotlin团队很可能只有在认为新的实现在大多数用例下都能更好地工作时,才进行此更改。mutableListOf
然后,您可以透明地使用该新列表实现,并且可以免费获得更好的行为。mutableListOf
如果这听起来像您的情况,那就去吧。
另一方面,也许您花了很多时间思考您的问题,并认为这ArrayList
确实是最适合您的问题的方法,并且您不想冒险陷入次优状态。然后,您可能想要ArrayList
直接使用或使用arrayListOf
工厂功能(的ArrayList
特定于-的类似物mutableListOf
)。
mutableListOf<T>()
是返回的内联函数调用
MutableList<T>
。截至今天,mutableListOf
确实返回的实例ArrayList
。
ArrayList<String>()
是构造函数调用,不能内联。
换句话说,给出:
val a = mutableListOf<String>()
val b = ArrayList<String>()
a
是类型 MutableList<String>
b
是类型 ArrayList<String>
在运行时,a
和b
都将持有的实例ArrayList
。
注意,当具有组合内联是特别有用的类型物化,这证明存在listOf
,mutableListOf
等等。
a
并且b
具有不同的声明类型-因此编译时有所不同。
val b = arrayListOf<String>()
mutableListOf
也不ArrayList
是科特林关键字