Если вы используете listOf
, вы получите какую-то реализацию List
с интерфейсом List
только для чтения, содержащим элементы, которые вы предоставляются в качестве аргументов. Используя эту функцию, вы подразумеваете, что вас не волнует, как она реализована. На самом деле, это, вероятно, все еще будет java.util.ArrayList
под капотом, если вы используете JVM. Как отметил @Zabuza в комментариях здесь, на самом деле он поддерживается Arrays.ArrayList
, который является немного другой класс.
Если вы используете mutableListOf
, опять же, вы просто говорите, что хотите что-то , содержащее ваши элементы, которые реализуют MutableList
, но реализацию до стандартной библиотеки. Опять же, это в настоящее время поддерживается ArrayList
, но это деталь реализации.
Есть пара функций, которые явно возвращают более конкретный тип, если они вам нужны. Есть arrayListOf
, sortedSetOf
, linkedMapOf
и еще пара - не бывает linkedListOf
, но вы Возможно, вы могли бы реализовать его самостоятельно, если он вам нужен и не хотите использовать конструктор LinkedList
.
Более общие listOf
и mutableListOf
предпочтительнее, если есть изменения, которыми вы будете делиться своим кодом между платформами позже - поскольку они являются частью стандартной библиотеки, они могут возвращать ArrayList
в JVM, но различные реализации для конкретной платформы, если вы компилируете в JavaScript или Native.