为什么Kotlin中的选项需要显式初始化?

时间:2018-05-15 14:36:11

标签: kotlin optional

在类中定义可选属性时,Kotlin要求将其显式初始化为null,如下所示:

var myString: String? = null

有没有理由说编译器无法推断出这个初始值?我相信Swift会让你跳过= null部分,但这是Kotlin中的编译器错误。在编写以下内容后自动将值设为null会不会更简单?

var myString: String?

2 个答案:

答案 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 应该初始化为哪个? nullvar a: Int??这两个论点都有一些原因。

在Kotlin中, nullables 不是选项