Nem mutableListOfnem ArrayListsão palavras-chave em Kotlin
Ilya
Respostas:
137
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 ArrayListrealmente é 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).
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.
E eu colocaria "conveniência" entre aspas. Até que MutableList realmente tenha uma implementação diferente, fornecer um objeto central que faz a mesma coisa que outro objeto central é confuso e nem um pouco conveniente. :(
mutableListOf
nemArrayList
são palavras-chave em KotlinRespostas:
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 umArrayList
".Na prática, na implementação atual de compilação do Kotlin para a JVM, a chamada
mutableListOf
produzirá umArrayList
, 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
mutableListOf
para 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.
mutableListOf
então, você usaria essa nova implementação de lista de forma transparente e obteria esse comportamento melhor gratuitamente. Vá em frente,mutableListOf
se 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 usarArrayList
diretamente ou usar aarrayListOf
função de fábrica (umArrayList
análogo específico paramutableListOf
).fonte
mutableListOf<T>()
é uma invocação de função embutida que retorna umMutableList<T>
. A partir de hoje,mutableListOf
retorna uma instância deArrayList
.ArrayList<String>()
é uma invocação do construtor e não pode ser embutida.Em outras palavras, dado:
a
é do tipoMutableList<String>
b
é do tipoArrayList<String>
Em tempo de execução,
a
eb
manterá uma instância deArrayList
.Note-se que inline é particularmente útil quando combinado com o tipo reification , o que justifica a existência de
listOf
,mutableListOf
e semelhantes.fonte
a
eb
têm diferentes tipos declarados - portanto, há uma diferença em tempo de compilação.val b = arrayListOf<String>()
Como você pode ver nas fontes :
Portanto, não há diferença, apenas um método de conveniência.
fonte