在 Android 中需要列表的地方使用 Kotlin 可变列表或 ArrayList

Using Kotlin's MutableList or ArrayList where lists are needed in Android

我正在尝试学习 "Kotlin native way" 在 Android 中做事,同时我既不精通 Kotlin,也不精通 Java,也不精通 Android 开发。具体来说,何时使用 ArrayListMutableList

在我看来。然而,如果我查看 Android 个示例,他们似乎总是选择 ArrayList(据我目前所发现的)。

下面是使用 ArrayList 并扩展 Java 的 RecyclerView.Adapter.

的工作示例的片段
class PersonListAdapter(private val list: ArrayList<Person>,
                        private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {

问题 1)

我可以简单地写上面的代码如下(注意MutableList<>而不是ArrayList<>),即使我是从Android的Java代码中借用的吗?

class PersonListAdapter(private val list: MutableList<Person>,
                        private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {

问题 2)

总是使用 MutableListArrayList 真的更好吗?主要原因是什么?我在上面提供的一些 link 超出了我的理解,但在我看来 MutableList 是一个更宽松的实现,将来更有能力进行更改和改进。是吗?

ArrayList 是 Kotlin 中 MutableList 接口的实现:

class ArrayList<E> : MutableList<E>, RandomAccess

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-array-list/index.html

该答案可能表明应尽可能选择 MutableList,但 ArrayList 一个 MutableList。因此,如果您已经在使用 ArrayList,那么真的没有理由改用 MutableList,尤其是因为您实际上无法直接创建它的实例(MutableList 是一个接口,而不是 class)。

事实上,如果您查看 mutableListOf() Kotlin 扩展方法:

public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()

您可以看到它只是 returns 您提供的元素的 ArrayList。

区别是:

  • 如果你使用 ArrayList() 你明确地说“我希望这是 MutableListArrayList 实现并且永远不会更改为其他”。

  • 如果你使用 mutableListOf() 就像在说“给我默认的 MutableList 实现 ”。

MutableList (mutableListOf()) returns 和 ArrayList 的当前默认实现。如果在未来(不太可能)这种情况发生变化(如果设计了一个新的更有效的实现),这可能会更改为 ...mutableListOf(): MutableList<T> = SomeNewMoreEfficientList()

在这种情况下,无论您在代码中的何处使用 ArrayList(),它都将保留 ArrayList。无论您在何处使用 mutableListOf(),它都会从 ArrayList 变为出色命名的 SomeNewMoreEfficientList