Как инициализировать свойство с неизвестным типом в Kotlin? - PullRequest
1 голос
/ 15 апреля 2019

Я новичок в Kotlin, и на самом деле я делаю приложение Androïd в Kotlin. Я должен инициализировать некоторые свойства, значения которых неизвестны (это не так, но трудно определить с этого момента), поэтому я хотел бы сделать как в TypeScript, например: public startDate: any;, что означает, что тип startDate может быть любым (он не защищен, но в любом случае помогает получить значение, не учитывая, что происходит).

Есть ли способ сделать это в Котлине? Я попробовал '?' или * как в List <*> или параметры, но это не работает таким образом.

Спасибо за чтение!

Ответы [ 3 ]

1 голос
/ 15 апреля 2019

Используйте тип Any, если свойство может содержать любой объект (но не null, что означает, что оно должно быть немедленно инициализировано).

Используйте тип Any?, если свойство может содержать какой-либо объект, или null. Это эквивалентно типу Object Java.


С точки зрения дизайна, конечно, лучше, если вы знаете реальный тип и можете использовать сильную систему типов Kotlin. Если вы или ваша команда определяете типы, вы можете ограничить их для реализации определенного интерфейса, чтобы вы не присваивали ему произвольные значения. Позже, при рефакторинге приложения вы можете удалить этот интерфейс и получать ошибки компиляции для всех вхождений, заставляя вас правильно его исправить.

0 голосов
/ 15 апреля 2019

Как уже упоминалось, вы должны использовать любой тип.В зависимости от ваших потребностей используйте val или var ( val против var )

    var myVal : Any

Если ваша переменная также может быть нулевой, мы ?

    var myVar: Any?
    val myVal : Any?

Вы такженужно либо сделать вашу переменную абстрактной, либо объявить, что она будет инициализирована позже.lateinit действителен только для var, тогда как abstract применим для val и var

    lateinit var myVar: Any
    abstract val myVal : Any

Не забудьте проверить, являются ли lateinit var initializerd:

if (::myVar.isInitialized) {
    //use myVar
}

Подробнеео любом типе

Null Safety

0 голосов
/ 15 апреля 2019

Как Объект в качестве базового класса в Java, вы можете использовать Любой в kotlin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...