Прежде всего, вы используете конструкторы в стиле Java. Конструкторы Kotlin обозначаются ключевым словом constructor
или с использованием первичных конструкторов (круглые скобки после имени класса). fun ClassName
- это не то, как конструкторы объявляются в Kotlin.
Причина, по которой я указываю на это, заключается в том, что вы не сможете правильно инициализировать свой класс, если у вас нет прав конструкторов.
У вас есть два варианта: во-первых, используются вторичные конструкторы:
constructor(resId: Int, theAnswer: Boolean) {
resultId = resId
answerT = theAnswer
}
Второй использует основной:
class Question(var resId: Int, var theAnswer: Boolean) { // these might be val instead; change these if you don't change the vars. you can also remove the brackets if you don't have a class body.
}
Использование var
или val
в первичных конструкторах также объявляет их для класса. Если вы не используете var
или val
, они доступны только в блоке init
или для инициализации переменных (до тех пор, пока не будет выполнена инициализация класса, как в конструкторах). Вы можете сравнить, используя var
или val
, также добавив this.someField = someField
, где, как и раньше, он просто используется в конструкторе.
Также обратите внимание, что вторичные конструкторы обязаны вызывать первичный конструктор, если таковой существует. Вам также понадобятся первичные конструкторы для некоторых классов, которые требуют передачи определенных полей, которые вы не можете инициализировать напрямую, будь то потому, что для работы требуется конкретный экземпляр, или это одноэлементная реализация абстрактного класса или интерфейса.
Что касается списка, это зависит от того, как вы хотите это сделать. Ваш код Java использует массивы, а не списки. Для списков вы используете listOf(items)
, а для массивов вы можете arrayOf
. arrayOf()
работает точно так же, как listOf
, за исключением того, что возвращает Question[]
, а не List<Question>
. Правильная инициализация списка (или массива) выглядит следующим образом:
val questions = listOf (Вопрос (R.string.question_a, true), ...)
listOf
принимает аргумент vararg элементов, так что вы также можете создавать пустые списки или массивы, подобные этому (хотя для пустых массивов это немного бессмысленно).
Типы также автоматически выводятся, поэтому вам не нужно явно вводить : List<Question>
или listOf<Question>(...)
. Вам нужно явно объявить их, если вы не передаете никаких аргументов.
Также есть возможность добавить его вручную, если вам так хочется. Например, вы можете инициализировать списки напрямую и вызывать .add
для них.