小编bus*_*ush的帖子

当 T 为“Any”类型时,通用参数需要类型“Nothing”

我是一名新的 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::classthis.javaClass.kotlin,它可以正常工作而不会出现错误,但这似乎是一个非常糟糕的方法。

如果有人知道解决此问题的方法或完全不同的策略,我们将不胜感激。我是 Kotlin 的新手,有时仍然以 Java 的方式做事。

generics reflection kotlin

2
推荐指数
1
解决办法
1883
查看次数

标签 统计

generics ×1

kotlin ×1

reflection ×1