我有一个
class Foo {
lateinit var property1: String
lateinit var property2: Int
lateinit var property3: Long
}
那么有可能在这样的函数中传递类的属性吗?fun bar(fooProperty: FooProperty) {
println(
when(fooProperty) {
Foo.property1 -> "Property1"
Foo.property2 -> "Property2"
Foo.property3 -> "Property3"
}
)
}
但是,这是无效的代码。我只是想知道这是否可以实现。 最佳答案
是的,这是可能的,只需使用ClassName::propertyName
获取对该属性的引用,并使用KProperty1<ClassName, *>
作为参数类型。
因此,带有示例类的full working example(进行了一些更改以使该类可以编译)看起来像:
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)
}
此打印Property2