本文介绍: 另外再多说一句,密封类及其所有子类只能定义在同一个文件的顶层位置,不能嵌套在其他类中,这是被密封类底层的实现机制所限制的。关键字,它可以告诉Kotlin编译器,我会在晚些时候对这个变量进行初始化,这样就不用在一开始的时候将它赋值为。关键字也不是没有任何风险的,如果我们在student变量还没初始化时调用,那么程序还是会崩溃的,并且会抛出。到目前为止,代码都是没有问题的,但比较让人讨厌的是,接下来我们不得不再编写一个。另外,由于密封类是一个可继承的类,因此在继承它的时候需要在后面加上一对括号。
对变量延迟初始化
延迟初始化使用的是lateinit
关键字,它可以告诉Kotlin编译器,我会在晚些时候对这个变量进行初始化,这样就不用在一开始的时候将它赋值为null
了。示例如下:
当我们使用lateinit
关键字对Student对象进行延迟初始化时,我们就不需要像之前章节提到过的一样,再对student进行判空处理,直接可以调用doHomework方法。
当然,当我们使用lateinit
关键字也不是没有任何风险的,如果我们在student变量还没初始化时调用,那么程序还是会崩溃的,并且会抛出UninitializedPropertyAccessException异常。
所以,当你对一个全局变量使用了lateinit
关键字时,请一定要确保它在被任何地方调用之前已经完成了初始化工作,否则Kotlin将无法保证程序的安全性。
另外,我们还可以通过代码来判断一个全局变量是否已经完成了初始化,这样在某些时候能够有效地避免重复对某一个变量进行初始化操作,示例代码如下:
具体语法就是这样,
使用密封类优化代码
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。