我正在使用 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
,但似乎是一种解决方法。我还有其他失踪的方式吗?
通过检查
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
的实际想法是由某个标志中的单个位进行编码。