在 Android 中需要列表的地方使用 Kotlin 可变列表或 ArrayList
Using Kotlin's MutableList or ArrayList where lists are needed in Android
我正在尝试学习 "Kotlin native way" 在 Android 中做事,同时我既不精通 Kotlin,也不精通 Java,也不精通 Android 开发。具体来说,何时使用 ArrayList
与 MutableList
。
在我看来。然而,如果我查看 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)
总是使用 MutableList
比 ArrayList
真的更好吗?主要原因是什么?我在上面提供的一些 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()
你明确地说“我希望这是 MutableList
的 ArrayList
实现并且永远不会更改为其他”。
如果你使用 mutableListOf()
就像在说“给我默认的 MutableList
实现 ”。
MutableList
(mutableListOf()
) returns 和 ArrayList
的当前默认实现。如果在未来(不太可能)这种情况发生变化(如果设计了一个新的更有效的实现),这可能会更改为 ...mutableListOf(): MutableList<T> = SomeNewMoreEfficientList()
。
在这种情况下,无论您在代码中的何处使用 ArrayList()
,它都将保留 ArrayList
。无论您在何处使用 mutableListOf()
,它都会从 ArrayList
变为出色命名的 SomeNewMoreEfficientList
。
我正在尝试学习 "Kotlin native way" 在 Android 中做事,同时我既不精通 Kotlin,也不精通 Java,也不精通 Android 开发。具体来说,何时使用 ArrayList
与 MutableList
。
在我看来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)
总是使用 MutableList
比 ArrayList
真的更好吗?主要原因是什么?我在上面提供的一些 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()
你明确地说“我希望这是MutableList
的ArrayList
实现并且永远不会更改为其他”。如果你使用
mutableListOf()
就像在说“给我默认的MutableList
实现 ”。
MutableList
(mutableListOf()
) returns 和 ArrayList
的当前默认实现。如果在未来(不太可能)这种情况发生变化(如果设计了一个新的更有效的实现),这可能会更改为 ...mutableListOf(): MutableList<T> = SomeNewMoreEfficientList()
。
在这种情况下,无论您在代码中的何处使用 ArrayList()
,它都将保留 ArrayList
。无论您在何处使用 mutableListOf()
,它都会从 ArrayList
变为出色命名的 SomeNewMoreEfficientList
。