延迟加载属性

正常情况下,如果有一个不为空的属性,那么必须在构造器中对其赋值。然而在大多数情况下这不是很方便。比如属性初始化依赖注入信息,或者单元测试的设置方法。在这样的情形下,你不能再构造器中初始化一个不能为空的属性,但是你依然想避免空检查。为了处理这种情况,你可以将属性标记为lateinit

public class MyTest {
    lateinit var subject: TestSubject

    @SetUp fun setup() {
        subject = TestSubject()
    }

    @Test fun test() {
        subject.method()
    }
}

lateinit标识符只能用在var属性上,并且该属性被定义在class内部(而不是主构造器中定义),并且属性不能拥有自定义的gettersetter。这种类型的属性必须是不为空的,不能使原生数据类型

在初始化前访问一个lateinit属性会抛出一个特定的异常,用来标识被访问的属性,并且指出其未被初始化。

results matching ""

    No results matching ""