我想初始化val属性,但属性初始化程序很复杂(包含几行代码):
private val properties: Properties = {
val properties = Properties()
val stream = Application::class.java.getResourceAsStream("application.properties")
properties.load(stream)
properties
}.invoke()
Run Code Online (Sandbox Code Playgroud)
是否可以在不使用lambda的情况下重写此属性初始值设定项?
您可以使用apply,如果你正在创建的东西实例可以在一开始分配,然后要修改它.let()当你有一件事,但想把它变成另一件事时使用.你可以run()在没有任何东西时使用,并建立一些东西来返回.
使用申请:
private val properties = Properties().apply {
load(Application::class.java.getResourceAsStream("application.properties"))
}
Run Code Online (Sandbox Code Playgroud)
或使用let :(不是最好的例子,但你明白了)
private val properties = Application::class.java.getResourceAsStream("application.properties")
.let { stream ->
val props = Properties()
props.load(stream)
props
}
Run Code Online (Sandbox Code Playgroud)
或使用run:
private val properties = run {
val properties = Properties()
val stream = Application::class.java.getResourceAsStream("application.properties")
properties.load(stream)
properties
}
Run Code Online (Sandbox Code Playgroud)
有些库会创建这些变体并将它们称为类似verifiedBy或initializedBy基本上做同样的事情,但要明确其意图.创建新函数,以便您的代码以您想要的方式读取,但也可以通过尝试使用stdlib函数来平衡,因为这与其他Kotlin用户一致.
有apply扩展功能,非常适合这种用例.使用此功能可以重写代码,如:
private val properties = Properties().apply {
load(Application::class.java.getResourceAsStream("application.properties"))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |