private val repositories = mutableListOf<String>()
private val repositories = ArrayList<String>()
Ambos são lista mutável, então qual é o sentido de duas palavras mutableListOf- chave ou ArrayList?
ou existe alguma diferença importante?
Respostas:
A única diferença entre os dois é comunicar sua intenção.
Quando você escreve val a = mutableListOf(), você está dizendo "Eu quero uma lista mutável e não me importo particularmente com a implementação". Ao escrever, em vez disso, val a = ArrayList()você está dizendo "Eu quero especificamente um ArrayList".
Na prática, na implementação atual de compilação do Kotlin para a JVM, a chamada mutableListOfproduzirá um ArrayList, e não há diferença no comportamento: uma vez que a lista é construída, tudo se comportará da mesma forma.
Agora, digamos que uma versão futura do Kotlin seja alterada mutableListOfpara retornar um tipo diferente de lista.
Mais provável do que não, a equipe Kotlin só faria essa mudança se descobrir que a nova implementação funciona melhor para a maioria dos casos de uso. mutableListOfentão, você usaria essa nova implementação de lista de forma transparente e obteria esse comportamento melhor gratuitamente. Vá em frente, mutableListOfse for esse o seu caso.
Por outro lado, talvez você tenha passado muito tempo pensando sobre seu problema e percebido que ArrayList realmente é a melhor opção para ele e não quer correr o risco de ser movido para algo abaixo do ideal. Então você provavelmente deseja usar ArrayListdiretamente ou usar a arrayListOffunção de fábrica (um ArrayListanálogo específico para mutableListOf).
mutableListOf<T>()é uma invocação de função embutida que retorna um
MutableList<T>. A partir de hoje, mutableListOfretorna uma instância de ArrayList.
ArrayList<String>() é uma invocação do construtor e não pode ser embutida.
Em outras palavras, dado:
val a = mutableListOf<String>()
val b = ArrayList<String>()
a é do tipo MutableList<String>b é do tipo ArrayList<String>Em tempo de execução, ae bmanterá uma instância de ArrayList.
Note-se que inline é particularmente útil quando combinado com o tipo reification , o que justifica a existência de listOf, mutableListOfe semelhantes.
ae btêm diferentes tipos declarados - portanto, há uma diferença em tempo de compilação.
val b = arrayListOf<String>()
Como você pode ver nas fontes :
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()
Portanto, não há diferença, apenas um método de conveniência.
mutableListOfnemArrayListsão palavras-chave em Kotlin