Dj *_*shi 2 generics arguments properties kotlin
我有一个
class Foo {
lateinit var property1: String
lateinit var property2: Int
lateinit var property3: Long
}
Run Code Online (Sandbox Code Playgroud)
那么是否可以在这样的函数中传递类的属性?
fun bar(fooProperty: FooProperty) {
println(
when(fooProperty) {
Foo.property1 -> "Property1"
Foo.property2 -> "Property2"
Foo.property3 -> "Property3"
}
)
}
Run Code Online (Sandbox Code Playgroud)
然而,这是无效的代码。我只是想知道这是否可以实现。
是的,这是可能的,只是ClassName::propertyName用来获取对属性的引用并KProperty1<ClassName, *>作为参数类型。
因此,您的示例类的完整工作示例(稍作更改以使类编译)将如下所示:
import kotlin.reflect.KProperty1
class Foo {
lateinit var property1: String
var property2: Int = 0
var property3: Long = 0
}
fun bar(fooProperty: KProperty1<Foo, *>) {
println(
when(fooProperty) {
Foo::property1 -> "Property1"
Foo::property2 -> "Property2"
Foo::property3 -> "Property3"
else -> throw IllegalArgumentException("Not a known property")
}
)
}
fun main() {
bar(Foo::property2)
}
Run Code Online (Sandbox Code Playgroud)
这打印
Property2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |