gpt4 book ai didi

lambda - 没有 lambda 的多行/复杂属性初始化器

转载 作者:IT老高 更新时间:2023-10-28 13:46:37 25 4
gpt4 key购买 nike

我想初始化 val 属性,但是属性初始化器很复杂(包含几行代码):

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

是否可以在不使用 lambda 的情况下重写此属性初始化程序?

最佳答案

您可以使用 apply如果您正在创建的事物的实例可以在开始时分配,然后您想要修改它。使用let()当你拥有一件事,但想把它变成另一件事。您可以使用run()当你从一无所有开始,并建立一些东西来返回时。

使用应用:

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

或使用 let:(不是最好的例子,但你明白了)

private val properties = Application::class.java.getResourceAsStream("application.properties")
.let { stream ->
val props = Properties()
props.load(stream)
props
}

或使用运行:

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

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

关于lambda - 没有 lambda 的多行/复杂属性初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35875779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com