我是Kotlin的初学者,实际上我正在Kotlin进行Androïd应用程序。我必须初始化一些属性,这些属性的值是未知的(不是,但是现在很难定义),所以我想像在TypeScript中那样进行创建,例如:public startDate: any;
,这意味着startDate的类型可以可以是任何东西(它不是安全的,但无论如何都有助于获得价值,而与发生的事情无关)。
在Kotlin中有没有办法做到这一点? 我试过了吗?或*如List <*>或参数中的*,但这种方式不起作用。
感谢阅读!
答案 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
}