Intereting Posts
Dagger2 вводит презентатора в ошибку активности Kotlin Kotlin Kapt: java.lang.IllegalStateException: endPosTable уже установлен kotlin logging с лямбда-параметрами Разработка лямбда-выражения Котлин, структура проекта Слушатель не вызывается, когда запрашивается диалоговое окно «Обновление сервисов Google Play» Котлин. Как проверить, является ли поле нулевым путем отражения? Ошибка: ошибка: разрешены только безопасные (?.) Или непустые (!!.) Вызовы в приемнике с нулевым значением типа View? Возможно ли реализовать индивидуальное деструктурирование для не-класса данных в Котлин? Как проверить метод, когда в kotlin Глобальная функция расширения в котлине В библиотеке Injekt для Kotlin, как мне вводить функции вместо значений? Связывание представления с изменяющимся свойством контроллера Реализация интерфейса возврата с помощью Kotlin и лямбда Пользовательский десериализатор Kotlin Gson для списка

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

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

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

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

Два момента:

  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 :

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

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

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