gpt4 book ai didi

generics - 扩展函数内的 Kotlin KClass 实例

转载 作者:行者123 更新时间:2023-12-02 22:07:15 28 4
gpt4 key购买 nike

我需要访问通用扩展函数内的类类型。例如,如果我想创建一个扩展函数来返回我正在扩展的类型的成员集合,我会这样做:

fun <T> T.getMembers() =
this::class.memberProperties

问题是我无法在函数内执行 this::class 或 T::class 。有没有办法访问泛型类型的类类型?

最佳答案

一般来说,您不会使用 ::this 获取类,因为 this 引用的是实例,而不是类型。通常,您可以使用 this.javaClass.kotlin

this 获取类

T 引用类型,因此通常您会使用 T::class 引用 KClass。

但是,在您的特定代码片段中,如果不进行一些额外的更改,这些都不会起作用。

由于泛型类型 T 不限于 Any,因此您无法访问 javaClass 字段。要添加约束,请使用:

fun <T : Any> T.getMembers() =
this::class.memberProperties

由于泛型类型没有具体化,因此不能使用T::class。要具体化 T,请使用:

inline fun <reified T : Any> T.getMembers() =
T::class.memberProperties

参见https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters

关于generics - 扩展函数内的 Kotlin KClass 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42034494/

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