Не удается написать основной конструктор класса Activity в Kotlin в Android

Из документации я пытаюсь сделать что-то подобное

//Primary: class Main2Activity(val name: String) { } //Secondary: constructor(a: Int) : super() { this.a = a } 

Итак, студия android дает мне возможность создать этот вторичный конструктор. Но он не распознает основной конструктор, который я написал выше. Я также попробовал это несколькими другими способами, такими как init и все. Это дает мне ошибку, что вторичный конструктор не допускается без определения первичного. Итак, как писать первичный конструктор.

Solutions Collecting From Web of "Не удается написать основной конструктор класса Activity в Kotlin в Android"

Два момента:

  1. Используйте this ключевое слово вместо super
  2. Передайте строковый параметр в ваш основной конструктор

 class Main2Activity(val name: String) { var a: Int = 0 constructor(a: Int) : this("myString") { this.a = a } } 

Пример:

 val first = Main2Activity("Kotlin") print("${first.name} ${first.a}") // >>> Kotlin, 0 val second = Main2Activity(11) print("${second.name} ${second.a}") // >>> myString, 11 

Очень хорошее объяснение @Oliver Charlesworth :

Ясно, что существуют различные синтаксические различия [между первичными и вторичными конструкторами] . Но основная концептуальная разница заключается в том, что все вторичные конструкторы в конечном счете делегируют основному конструктору.

Способ, которым я об этом думаю, заключается в том, что основным конструктором является канонический интерфейс для создания объекта, а вторичные конструкторы похожи на статические помощники для преобразования других наборов аргументов в соответствие с этим интерфейсом.

Для получения дополнительной информации: Конструкторы