Второй вторичный конструктор Котлина расширенного класса

Как у вас есть условные супервызыки на основе значения в четвертом вторичном конструкторе? Почему это не работает?

open class SecondaryConstructors{ constructor(i:Int) constructor(s:String) } class SecondaryExtended:SecondaryConstructors { constructor(i:Int):super(i) constructor(s:String):super(s) constructor():super(if(true)1 else 0) constructor(intOrString:Boolean):super( if(intOrString) 3 else "hey") // conditional branch result of int/string is implicitly cast to Any // error - none of the following functions can be called with the arguments supplied } 

Это не будет работать, поскольку выражение if передается, поскольку аргумент конструктора не имеет уникального типа, кроме Any , который является наиболее распространенным типом. Вы получаете ошибку, так как нет конструктора соответствия, ожидающего Any в качестве аргумента.

 constructor(intOrString:Boolean): super( if(intOrString) 3 else "hey") 

Невозможно, как и в Java, сделать условный супервызов. Супер тип должен быть инициализирован напрямую, как указано в документации :

Если класс не имеет первичного конструктора, то каждый вторичный конструктор должен инициализировать базовый тип, используя ключевое слово super, или делегировать> другому конструктору, который делает это. Обратите внимание, что в этом случае разные вторичные конструкторы могут вызывать разные конструкторы базового типа

Intereting Posts
Поддержка групп Kotlin Regex «Ни одна из следующих функций не может быть вызвана с аргументами, предоставленными« с топливным HTTP-протоколом » Как обрабатывать исключения в Котлине? java.lang.NoSuchMethodException: com … Сотрудник. <init> () Тестирование модуля Проверка функции, которая должна быть вызвана Ошибка компиляции, вызывающая метод расширения из другого метода расширения в Котлине torgadoFX togglebutton не имеет текстового свойства Что означает предупреждение «Использовать свойства из пакетов вариантов сборки»? Тестирование Kotlin в студии android Невозможно использовать пользовательский getter с делегированным свойством Использование расширения свойства Gradle в kotlin / spring boot Исключение, вызванное: java.lang.ClassNotFoundException: org.reactivestreams.Publisher Неверный положительный результат в проверке линзы Android для LinkedHashMap.remove () Json для классов данных kotlin Разница между любым типом и дженериками в Котлине