在Kotlin网站上“返回单元的方法的生成器风格的使用”使我迷惑不解

Kotlin网站链接

该网站说
“返回单元的方法的生成器式使用”

fun arrayOfMinusOnes(size: Int): IntArray { return IntArray(size).apply { fill(-1) } } 

由于函数“apply”返回genericstypes,我认为Unit与Java中的void是一样的,所以使用void方法作为构造器样式,这是没有意义的。

它试图做的一点是,如果你只是做了传统的Java构建器样式,就像这样:

 return IntArray(size) .fill(-1) 

那么它不会编译,因为它是Unittypes的,而不是IntArray 。 所以传统上,你必须做这样的事情:

 val ret = IntArray(size) ret.fill(-1) return ret 

apply使您能够避免这种情况,因为返回types仍然是IntArray (或T ,一般)types。

拿这个:

 class X { var a: Int? = null var b: Int? = null fun first(a: Int) = apply { this.a = a } fun second(b: Int) = apply { this.b = b } } X().first(2).second(3) 

apply函数用于在设置属性后返回X的实例。 这使两种方法的构建器式调用成为可能。 如果apply被删除,该function将返回Unit