Прежде всего, ваш код содержит несколько ошибок. Это может быть проблема MCVE и / или копирования-вставки, но мне нужно решить их, прежде чем начать работу с массивами.
var releve
до notes
класса не допускается. Вы не назначаете его, вы не объявляете тип, и компилятор будет жаловаться, если вы скопируете код из своего вопроса.
Во-вторых, сам массив var: Array
в верхнем регистре, а инициализация - отдельная. Это было бы более правильно ( обратите внимание, что это все еще не работает - решение для этого будет дано позже в этом ответе):
var releve: Array<modul> = Array(10) {...}
// or
var releve = Array<modul>(10) {...}
И последнее, прежде чем я начну с самого массива: прочитайте языковые соглашения , особенно названия. Все ваши занятия должны начинаться с заглавной буквы.
Массивы Kotlin во многом отличаются от массивов Java, но наиболее заметным из них является то, что для прямой инициализации массива также требуется инициализатор.
Ожидается, что скобки создадут новый экземпляр, а вы - нет. Вы создаете строку, которая в вашем случае не modul
.
Есть несколько способов исправить это в зависимости от того, как вы хотите это сделать.
Если у вас есть экземпляры, которые вы хотите добавить в массив, вы можете использовать arrayOf
:
arrayOf(modulInstance, modulInstance2, ...)
Если вы хотите создать их напрямую, вы можете использовать свой подход:
var releve = Array(10) { modul() }
Примечание по поводу обоих: из-за инициализации вы получаете автоматический вывод типа и вам не нужно явно объявлять <modul>
Если вам нужны массивы в стиле Java, вам нужен массив нулей.
Есть два способа сделать это:
var releve = arrayOfNulls<modul>(10)
// or
var releve = Array<modul?>(10) { null }
Я настоятельно рекомендую первый, потому что он чище. Хотя я не уверен, что есть разница в производительности.
Обратите внимание, что это выводит в массив обнуляемый тип, но позволяет работать с массивами аналогично Java. Инициализация с этой точки аналогична Java: releve[i] = modul()
. Этот подход в основном полезен, если у вас есть аргументы, которые вы хотите добавить в каждый из классов, и вам нужно сделать это вручную. Использование ручных инициализаторов также предоставляет вам индекс ( см. Документацию ), который вы можете использовать при инициализации.
Обратите внимание, что если вы используете цикл for для инициализации, вы также можете использовать Array(10) { YourClass() }
и использовать предоставленный индекс, если вам нужна какая-либо чувствительная к индексу информация, такая как аргументы функции. Конечно, нет ничего плохого в использовании цикла for, но он может быть чище.
Дальнейшее чтение