如何获取Nothing的KType?

问题描述 投票:0回答:1

我正在使用 Kotlin 进行 Reflection Stuff™,并且我正在尝试使用

Nothing
填充通用参数。然而,为此我需要
KType
Nothing
typeOf<Nothing>()
不起作用,因为我
cannot use 'Nothing' as reified type parameter
,并且我不知道还有其他方法可以直接获得
KType
Nothing

我现在正在使用

typeOf<List<Nothing>>().arguments.first().type

这让我得到了

KType
Nothing
,但似乎是一种解决方法。我还有其他失踪的方式吗?

kotlin reflection
1个回答
0
投票

通过检查

typeOf<List<Nothing>>()
编译成的字节码,我们可以看到它基本上是在创建一个
KType
,如下所示:

Reflection.typeOf(
    List::class.java, 
    KTypeProjection.invariant(
        Reflection.nothingType(Reflection.typeOf(Void::class.java))
    )
)

我们可以看到它使用

Reflection.nothingType
来创建代表
KType
Nothing
,所以你可以直接使用它。

Reflection.nothingType(typeOf<Void>())

nothingType
需要另一个
KType
作为参数,可能是因为
KType
都需要有
KClassifier
支持。
Nothing
的实际想法是由某个标志中的单个位进行编码

© www.soinside.com 2019 - 2024. All rights reserved.