小编Gou*_*lov的帖子

为什么SomeClass :: class是KClass <SomeClass>但是这个:: class是KClass <out SomeClass>

我想打印我班级的属性值.

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>.知道为什么会这样吗?

reflection kotlin

6
推荐指数
1
解决办法
217
查看次数

标签 统计

kotlin ×1

reflection ×1