gpt4 book ai didi

kotlin - kotlin:列出任何对象的属性-方差错误

转载 作者:行者123 更新时间:2023-12-02 13:14:17 24 4
gpt4 key购买 nike

我正在尝试编写一个可以生成任何类型的属性和值的映射的函数

inline fun <reified T : Any> T.propertiesMap() {
for (property in this::class.memberProperties) {
property.get(this)
}
}

我收到有关 property.get(this)的编译错误

out-projected type [...] prohibits the use of 'public abstract fun get(receiver...

最佳答案

问题是this::class会生成KClass<out T>而不是KClass<T>,这是在T调用中使用property.get(...)类型的任何内容所需要的。因此,您可以进行未经检查的强制转换以执行您想要的操作:

fun <T : Any> T.propertiesMap() {
@Suppress("UNCHECKED_CAST")
for (property in (this::class as KClass<T>).memberProperties) {
property.get(this)
}
}

不需要内联函数或类型化参数。否则,您可以将函数更改为使用 T::class而不是 this::class来创建匹配的 KClass<T>
inline fun <reified T : Any> T.propertiesMap() {
for (property in T::class.memberProperties) {
property.get(this)
}
}

关于kotlin - kotlin:列出任何对象的属性-方差错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49632755/

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