我是一名新的 Kotlin 程序员,我遇到了与泛型相关的问题
在以下代码中,我收到错误it.get(this)“类型不匹配。必需:无。找到:任何。
inline fun <reified T : Any> Any.getPropertiesWithType() =
this::class.memberProperties
.filter { it.returnType.isSubtypeOf(T::class.starProjectedType) }
.map {
it.isAccessible = true
it.get(this) as T
}
Run Code Online (Sandbox Code Playgroud)
这很令人困惑,因为memberProperties返回 aCollection<KProperty1<T, *>>其中 T 是 的类型,在我的例子中this就是这样。采用相同类型 T 的一个参数,因此我希望可以顺利通过。AnyKProperty1.get()Any
我注意到的一件事是,it过滤器和映射中都是类型KProperty<out Any, *>>,但memberProperties没有输出方差。
如果我替换this::class为this.javaClass.kotlin,它可以正常工作而不会出现错误,但这似乎是一个非常糟糕的方法。
如果有人知道解决此问题的方法或完全不同的策略,我们将不胜感激。我是 Kotlin 的新手,有时仍然以 Java 的方式做事。