Использование listOf против arrayListOf - PullRequest
1 голос
/ 27 февраля 2020

Есть ли лучшая практика использования listOf() или arrayListOf() в Kotlin коде? Оба они фактически возвращают одну и ту же реализацию, и я понимаю, что listOf лучше в том смысле, что он не привязан к конкретной реализации c. Здесь документы для него?
Документировано ли это где-нибудь в языковом стиле?
Есть ли другие причины использовать каждый из них?

1 Ответ

6 голосов
/ 27 февраля 2020

Одно заметное и важное отличие состоит в том, что listOf дает вам только для чтения List, тогда как arrayListOf дает вам MutableList. Определенно предпочтительнее использовать структуры данных только для чтения, когда это возможно.

val l1 = listOf(1)
l1.add(2) //not possible

val l2 = arrayListOf(2)
l2.add(1) //ok

С другой стороны, если вы не полностью полагаетесь на вывод типов, вы можете сделать переменную для ArrayList доступной только для чтения, как хорошо:

val l3: List<Int> = arrayListOf(2)
l3.add(1) //not possible anymore

Смысл не использования arrayListOf в том, что вы хотите полагаться на библиотеку, чтобы выбрать фактическую реализацию. На данный момент это ArrayList, который может измениться в будущих версиях. Например, если Kotlin решит добавить более мощную обратно-совместимую версию ArrayList, они могут изменить реализацию, и ваш код продолжит работать (улучшенным способом). Если вы, с другой стороны, хотите положиться на ArrayList (через arrayListOf), у вас, вероятно, есть конкретный сценарий, в котором приемлема только эта реализация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...