我想打印我班级的属性值.
fun print() {
val cl = this::class
cl.declaredMemberProperties.filter {it.visibility != KVisibility.PRIVATE}.forEach {
println("${it.name} = ${it.get(this)}")
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试构建此代码时,我收到编译器错误:
Error:(34, 40) Kotlin: Out-projected type 'KProperty1<out SomeClass, Any?>' prohibits the use of 'public abstract fun get(receiver: T): R defined in kotlin.reflect.KProperty1'
Run Code Online (Sandbox Code Playgroud)
当我this改为班级名字时,SomeClass一切都很好
fun print() {
val cl = SomeClass::class
cl.declaredMemberProperties.filter {it.visibility != KVisibility.PRIVATE}.forEach {
println("${it.name} = ${it.get(this)}")
}
}
Run Code Online (Sandbox Code Playgroud)
所以问题是,编译器换型的this::class,以KClass<out SomeClass>代替使用KClass<SomeClass>.知道为什么会这样吗?