如何在Kotlin中初始化未知类型的属性?

时间:2019-04-15 13:56:06

标签: android kotlin types

我是Kotlin的初学者,实际上我正在Kotlin进行Androïd应用程序。我必须初始化一些属性,这些属性的值是未知的(不是,但是现在很难定义),所以我想像在TypeScript中那样进行创建,例如:public startDate: any;,这意味着startDate的类型可以可以是任何东西(它不是安全的,但无论如何都有助于获得价值,而与发生的事情无关)。

在Kotlin中有没有办法做到这一点? 我试过了吗?或*如List <*>或参数中的*,但这种方式不起作用。

感谢阅读!

3 个答案:

答案 0 :(得分:1)

如果属性可以包含任何对象,则使用类型Any(但不能包含null,这意味着必须立即对其进行初始化)。

如果属性可以包含任何对象或Any?,则使用类型null。这等效于Java的Object类型。


从设计的角度来看,如果您知道实际的类型并可以利用Kotlin的强类型系统,那当然更好。如果您或您的团队正在定义类型,则可能会限制它们以实现某个接口,因此您不必为其分配任何值。稍后,在重构应用程序时,您可以删除此接口,并且在所有情况下都会收到编译错误,从而迫使您对其进行正确修复。

答案 1 :(得分:0)

Object 一样,它是java中的基类,您可以在kotlin中使用 Any

答案 2 :(得分:0)

如上所述,您应该使用Any类型。根据您的需要使用val或var(val vs var

    var myVal : Any

如果您的变量也可以为null,请?

    var myVar: Any?
    val myVal : Any?

您还需要使变量成为抽象变量,或声明它将在以后初始化。 lateinit仅对var有效,而abstract适用于val和var

    lateinit var myVar: Any
    abstract val myVal : Any

不要忘记检查lateinit var是否被初始化:

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

More about the Any type

Null Safety