在类中定义可选属性时,Kotlin要求将其显式初始化为null,如下所示:
var myString: String? = null
有没有理由说编译器无法推断出这个初始值?我相信Swift会让你跳过= null
部分,但这是Kotlin中的编译器错误。在编写以下内容后自动将值设为null会不会更简单?
var myString: String?
答案 0 :(得分:9)
明确性是Kotlin整体语言设计的一部分。 Kotlin语言中没有任何类型的隐式默认值。还希望阻止(误)使用空值,因此就初始化而言,空值不以任何方式被认为是特殊的。如果你有一个不可为空的字符串var myString: String
,你需要用一些东西来初始化它,就像你需要用某些东西初始化一个可空字符串var myString: String?
一样,这样它的初始值总是显式的。
注意,从技术上讲,Kotlin中的String?
不是Kotlin中的可选字符串。在Kotlin中,它被称为 nullable 字符串。但是,最常见的空值用例是表示“缺少价值”。
答案 1 :(得分:3)
没有理由Workbook_Open
必须是未初始化变量的初始值。
不是推断。
这只是斯威夫特的规则,科特林没有这样的规则。
您认为Option Explicit
Private WithEvents app As Excel.Application
Private Sub Workbook_Open()
Set app = Application
End Sub
Private Sub app_NewWorkbook(ByVal Wb As Workbook)
'Wb holds the object reference for the new workbook that was created
End Sub
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
'Wb holds the object reference for the workbook that was opened
End Sub
应该初始化为哪个? null
或var a: Int?
?这两个论点都有一些原因。
在Kotlin中, nullables 不是选项。