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是科特林关键字