Как создать список в Котлине? - PullRequest
0 голосов
/ 13 мая 2018

Я пробовал это в Kotlin REPL

var listA = listOf(null ,null)
var listB = [null, null]

Первая строка работает нормально, как и ожидалось.При отображении списка A я получаю:

[null, null]

Вторая строка выдает следующую ошибку:

error: cannot use 'Nothing?' as reified type parameter
var listB = [null,null]
            ^
error: unsupported [Collection literals outside of annotations]
var listB = [null,null]
            ^
error: unsupported [Array<Nothing> in return type is illegal]
var listB = [null,null]
            ^

Когда я пытаюсь сделать то же самое с ненулевыми типами, то есть

var listC = [1,2]

Я получаю эту ошибку:

error: unsupported [Collection literals outside of annotations]
var listC = [1,2]
            ^

Я новичок в Kotlin.Может кто-нибудь объяснить, что здесь происходит?

Ответы [ 4 ]

0 голосов
/ 09 февраля 2019

Так что для случая изменяемых списков, вы можете объявить пустой String один с: val list: MutableList<String> = mutableListOf(). Обратите внимание на использование объявления val как var аналогично объявлению final в Java. Если вы хотите неизменный список, вы можете использовать val примерно так: val list: List<String> = listOf("x", "y", "z")

Для ясности, например, в изменяемых списках элементы могут быть удалены после их инициализации, а неизменяемые - нет.

Неизменяемые списки документов

Список изменяемых документов

0 голосов
/ 14 мая 2018

Вы получаете [null, null], потому что именно так toString() определено в java.util.AbstractCollection, а listOf создает java.util.ArrayList, который наследует эту реализацию.

Вы получаете ошибки, потому что это место в Котлине, где этот синтаксис работает: параметры аннотации .Так что парсер это понимает.Но он создает массивы, а не списки, поэтому ваш код не будет компилироваться, даже если синтаксис не ограничен аннотациями.

0 голосов
/ 30 мая 2018

Как указывало @ Carcigenicate , синтаксис для [null, null].
отсутствует. Однако у Kotlin есть несколько удобных методов для работы со списками и массивами.

Списки

  • listOf ()

    Создает новый список только для чтения.

  • listOfNotNull ()

    В основном так же, как listOf (), но без нулевых значений. Даже пустые строки пропущены.

  • arrayListOf ()

    Создает ArrayList. На этот раз вы можете изменить (добавить / удалить) элементы.

  • mutableListOf ()

    Ведет себя как arrayListOf (). На самом деле mutableListOf () внутренне использует ArrayLists. Читать дальше

Массивы

  • arrayOf ()

    Это создает массив, который сильно отличается от большинства языков, которые вы знаете. Вместо синтаксических структур, таких как {1, 2, 3} или [1, 2, 3], у вас есть функции в Котлине. Вы также получаете функции для типизированного массива:

    • booleanArrayOf ()
    • doubleArrayOf ()
    • charArrayOf ()
    • ...

Единственным исключением являются аннотации, объясняющие ошибку вашего компилятора [Collection literals outside of annotations]:

@MyAnnotation(arguments = [1, 2, 3])

Однако это может измениться в будущем, как обсуждалось здесь .


При работе с массивами важно знать типы возвращаемых данных, создаваемые этими функциями. В качестве примера: Array<Int> - это Integer[] под капотом, а IntArray - примитив int[] при нацеливании на JVM.
0 голосов
/ 13 мая 2018

Из документации Kotlin о коллекциях :

Kotlin не имеет специальных синтаксических конструкций для создания списков или наборов. Используйте методы из стандартной библиотеки, такие как listOf (), mutableListOf (), setOf (), mutableSetOf ().

Нет литералов списка в настоящее время для кода вне аннотаций.

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