kotlin - 如何在 Kotlin 中匿名传递委托属性?
问题描述
让我们假设一个简单的类:
class Foo(val p:String)
我想通过传递惰性委托来创建类的实例:
val lazyP by lazy {"foo"}
println(Foo(lazyP).p)
但我不需要样板lazyP
变量。如何写一个单行字?就像是:
println(Foo(by lazy {"foo"}).p)
解决方案
我想您要做的是构造Foo
并且p
仅在第一次调用时才计算?如果是这样,我认为Foo
您所做的定义不会起作用,因为当您构造时Foo
,会调用惰性委托。那是因为为了构造Foo
,需要一个字符串,所以此时会评估惰性委托。换句话说,这:
val lazyP by lazy { "foo" }
val foo = Foo(lazyP)
或多或少等同于:
val foo = Foo("foo")
我认为如果你想Foo
拥有一个惰性委托属性,你应该像这样定义它:
class Foo(lazyP: Lazy<String>) {
val p by lazyP
}
然后,您可以在不需要单独的变量的情况下以单行方式构造它:
val foo = Foo(lazy { "foo" })
推荐阅读
- html - CSS 网格问题:我无法让外部网格容器填满整个页面
- html - 页面刷新时出现奇怪的字体故障
- javascript - 在 Material-UI 选项卡中使用分隔线
- machine-learning - 如何处理 AUC 的加权平均值并选择正确的阈值来构建混淆矩阵?
- fabricjs - FabricJS:突出显示仅在选择矩形内的对象
- makefile - 为多个文件创建一个 Makefile 规则
- jquery - 获取单击的下拉项的值
- angular - 角度反应形式组错误无法访问组元素
- nested - MIPS:将`$ra`保存到嵌套函数的堆栈中
- php - Pinterest 创建带有 PHP Curl 的 APP 失败问题