我正在努力学习用Android做事情的“Kotlin原生方式”,同时既不是Kotlin、Java,也不是Android开发方面的专家。具体来说,何时使用ArrayList
与MutableList
相比。
在我看来,应该尽可能选择MutableList
。然而,如果我看一下Android的例子,他们似乎总是选择ArrayList
(据我所知)。
下面是一个使用ArrayList
并扩展Java的RecyclerView的工作示例的片段。适配器
。
class PersonListAdapter(private val list: ArrayList<Person>,
private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {
我可以简单地编写上面的代码如下(注意MutableList)
class PersonListAdapter(private val list: MutableList<Person>,
private val context: Context) : RecyclerView.Adapter<PersonListAdapter.ViewHolder>() {
总是使用
MutableList
而不是ArrayList
真的更好吗?主要原因是什么?我上面提供的一些链接超出了我的理解范围,但在我看来,MutableList
是一个更松散的实现,在未来更能改变和改进。是这样吗?
区别在于:
>
如果您使用ArrayList()
您明确表示“我希望这是MutableList
的ArrayList
实现,并且永远不要更改为任何其他内容”。
如果使用mutableListOf()
就像说“给我默认的MutableList
实现”。
MutableList
(mutableListOf()
)的当前默认实现返回一个ArrayList
。如果(不太可能)这种情况在将来发生变化(如果设计了一种新的更有效的实现),则可能会变为。。。mutableListOf():MutableList
在这种情况下,无论您在代码中使用了什么
ArrayList()
这都将保持ArrayList
。无论您在哪里使用mutableListOf()
这将从ArrayList
更改为一个名为的全新高效列表。
ArrayList是Kotlin中可变列表接口的实现:
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是一个接口,而不是一个类)。
事实上,如果您查看mutableListOf()
Kotlin扩展方法:
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
您可以看到,它只返回您提供的元素的ArrayList。
看起来很简单,但是,如何初始化 Kotlin 的以清空? 我可以用这种方式破解它,但我肯定有更简单的方法:
我已经开始使用Kotlin作为java的替代品,并且非常喜欢它。然而,如果不跳回java领域,我就无法找到解决方案: 我有一个
我有一个Java/Kotlin互操作问题。一个Kotlin不可变列表被编译成一个普通的java.util.ArrayList,它是可变的! 静态编程语言(库): Java(消费者): 如何使我的 Kotlin 类从 Java 的角度来看也是完全不可变的?
我想按id分组。 结果应如下所示: 静态编程语言中最惯用的方法是什么?
问题内容: 我有Java / Kotlin互操作问题。Kotlin不可变列表被编译为可变的普通java.util.ArrayList! Kotlin(图书馆): Java(消费者): 从Java的角度来看,如何也使我的Kotlin类完全不可变? 问题答案: 默认情况下,Kotlin中的所有非集合都是 编译时只读类型 ,但不是 不可变的 。请参见以下代码段: 要真正拥有一个不变的列表,请考虑Guav
问题内容: 我继承了一个使用Hibernate 3.0连接到SQL Server数据库的Websphere Portal项目。 这个项目中大约有130个Hibernate表类。它们都实现了可序列化。它们均未声明serialVersionUID字段,因此Eclipse IDE对所有这些类均显示警告。 这些类是否真正需要实现Serializable? 如果是这样,是否有任何工具可以一次将生成的seri