java未知变量的类型_Kotlin的反思:未知的类型参数

我正在对Kotlin的反思进行一些实验 .

我试图通过其参数获得泛型类的反射对象 .

在Java中,那将是 ParameterizedType .

使用Java的反射API获取此类内容的方法有点复杂:创建泛型类的匿名子类,然后获取其超类型的第一个参数 .

这是一个例子:

@Suppress("unused") @PublishedApi

internal abstract class TypeReference {}

inline fun jGeneric() =

((object : TypeReference() {}).javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0]

当我 println(jGeneric>()) 时,它打印 java.util.List extends java.lang.String> ,这是合乎逻辑的,考虑到Kotlin的 List 使用声明站点 out 方差,并且Java类型没有可空性的概念 .

现在,我希望获得相同类型的结果,但使用Kotlin反射API(当然,它包含可空性信息) .

当然, List::class 无法工作,因为它产生 KClass . 我正在寻找 KType .

但是,当我尝试这个:

inline fun kGeneric() =

(object : TypeReference() {})::class.supertypes[0].arguments[0].type

当我 println(kGeneric>()) 时,会打印 [ERROR : Unknown type parameter 0] ,这很......很好,虎头蛇尾;)

我怎么能在Kotlin得到 KType 反映 List ?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值