不带lambda的多行/复杂属性初始值设定项

不带lambda的多行/复杂属性初始值设定项,lambda,kotlin,Lambda,Kotlin,我想初始化val属性,但属性初始值设定项很复杂(包含几行代码): 是否可以在不使用lambda的情况下重新编写此属性初始值设定项?有一个扩展函数,非常适合这种用例。使用此函数,您的代码可以重写如下: private val properties = Properties().apply { load(Application::class.java.getResourceAsStream("application.properties")) } 如果您正在创建的对象的实例可以在开始时分配,然

我想初始化
val
属性,但属性初始值设定项很复杂(包含几行代码):

是否可以在不使用lambda的情况下重新编写此属性初始值设定项?

有一个扩展函数,非常适合这种用例。使用此函数,您的代码可以重写如下:

private val properties = Properties().apply {
  load(Application::class.java.getResourceAsStream("application.properties"))
}
如果您正在创建的对象的实例可以在开始时分配,然后您希望对其进行修改,则可以使用。当你有一件东西,但想把它变成另一件时使用。当你一无所有地开始,并建立一些东西来回报时,你可以使用

使用应用

private val properties = Properties().apply {
   load(Application::class.java.getResourceAsStream("application.properties")) 
}
private val properties = run {
    val properties = Properties()
    val stream = Application::class.java.getResourceAsStream("application.properties")
    properties.load(stream)
    properties
}
或者使用:(不是最好的例子,但你明白了)

或使用运行

private val properties = Properties().apply {
   load(Application::class.java.getResourceAsStream("application.properties")) 
}
private val properties = run {
    val properties = Properties()
    val stream = Application::class.java.getResourceAsStream("application.properties")
    properties.load(stream)
    properties
}

一些库创建了它们的变体,并将它们称为或,它们基本上做相同的事情,但明确了意图。创建新函数,使您的代码能够按您想要的方式读取,但同时也要尝试使用stdlib函数,因为这与其他Kotlin用户一致。

您可以在此处使用
run{}
而不是调用
invoke()