gpt4 book ai didi

kotlin - 比较Kotlin中对象的通用属性值

转载 作者:行者123 更新时间:2023-12-02 13:22:16 26 4
gpt4 key购买 nike

我正在尝试编写一种方法来比较Kotlin中两个对象的“通用属性”(共享相同的名称/类型)。它打算在测试中使用,以比较“expected”对象与不同类型的“actual”对象。

到目前为止,这是代码的简化版本:

val obj1Props = obj1::class.memberProperties
val obj2Props = obj2::class.memberProperties

val commonPropertyPairs = obj1Props.map { obj1Prop ->
obj1Prop to obj2Props.find { obj2Prop -> obj1Prop.name == obj2Prop.name } }
.filter { pair -> pair.second != null }

commonPropertyPairs.forEach { pair ->
pair.first.get(obj1)
}

我目前在底部附近的“pair.first.get”下收到此错误消息:

out-projected type KProperty1<out Any, Any?> prohibits the use of public abstract fun get(receiver: T): R defined in kotlin.reflect.KProperty1



我知道我显然不能使用抽象方法,应该怎么做?

最佳答案

您需要使用obj1::class.memberProperties代替SomeClass::class.memberProperties,例如:

override fun buildNavItem() {
val obj1 = "Hello"
val obj2 = 10
val obj1Props = String::class.memberProperties
val obj2Props = Int::class.memberProperties

val commonPropertyPairs = obj1Props.map { obj1Prop ->
obj1Prop to obj2Props.find { obj2Prop -> obj1Prop.name == obj2Prop.name } }
.filter { pair -> pair.second == null }

commonPropertyPairs.forEach { pair ->
pair.first.get(obj1)
}
}

造成这种差异的原因是,当使用 SomeClass::class引用时,它必然是表示 SomeClass的类标记,而不是其可能的派生类之一,因此它是没有预测类型的 KClass<SomeClass>

关于kotlin - 比较Kotlin中对象的通用属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53954913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com