Mik*_*son 7 android arraylist kotlin mutablelist
我正在尝试学习在 Android 中做事的“Kotlin 原生方式”,同时既不是 Kotlin、Java 也不是 Android 开发的专家。具体来说,何时使用ArrayListvsMutableList。
在我看来,MutableList应该尽可能选择。然而,如果我查看 Android 示例,他们似乎总是选择ArrayList(就我目前发现的而言)。
下面是一个工作示例的片段,它使用ArrayList并扩展了 Java 的RecyclerView.Adapter.
class PersonListAdapter(private val list: ArrayList<Person>,
private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {
Run Code Online (Sandbox Code Playgroud)
即使我是从 Android 的 Java 代码中借用的,我是否可以简单地将上述代码编写如下(注意MutableList<>而不是ArrayList<>)?
class PersonListAdapter(private val list: MutableList<Person>,
private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {
Run Code Online (Sandbox Code Playgroud)
总是使用MutableListover真的更好ArrayList吗?主要原因是什么?我上面提供的一些链接让我无法理解,但在我看来,这MutableList是一个更松散的实现,在未来更有能力改变和改进。那正确吗?
The*_*rer 12
ArrayList 是 Kotlin 中 MutableList 接口的实现:
class ArrayList<E> : MutableList<E>, RandomAccess
Run Code Online (Sandbox Code Playgroud)
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-array-list/index.html
该答案可能表明应尽可能选择 MutableList,但 ArrayList是MutableList。因此,如果您已经在使用 ArrayList,那么真的没有理由改用 MutableList,尤其是因为您实际上无法直接创建它的实例(MutableList 是一个接口,而不是一个类)。
事实上,如果你看一下mutableListOf()Kotlin 扩展方法:
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
Run Code Online (Sandbox Code Playgroud)
您可以看到它只返回您提供的元素的 ArrayList。
Vla*_*lad 10
区别在于:
如果你使用ArrayList()你明确地说“我希望这是一个ArrayList实现MutableList并且永远不会改变其他任何东西”。
如果你使用mutableListOf()它就像说“给我默认的MutableList实现”。
MutableList( mutableListOf()) 的当前默认实现返回一个ArrayList. 如果在将来(不太可能)发生变化的情况下(如果设计了一个新的更有效的实现),这可能会更改为...mutableListOf(): MutableList<T> = SomeNewMoreEfficientList().
在这种情况下,您在代码中使用的任何地方ArrayList()都将保留ArrayList. 无论您在何处使用它,mutableListOf()它都会从 更改ArrayList为出色命名的SomeNewMoreEfficientList.
| 归档时间: |
|
| 查看次数: |
11884 次 |
| 最近记录: |