我有一个函数,它接受泛型类型的一个参数,我想访问它的类:
fun <T> test(t: T) {
t::class
}
这与"expression in class literal has nullable type"失败 . 没关系,我明白了(我可以使用 Any?
作为我的 T
和 null
作为值) .
但是,如果我将其更改为保证 t
不为null,它仍会失败并显示相同的错误消息:
fun <T> test(t: T) {
t!!::class
}
在哪种情况下 t!!::class
仍会造成麻烦?
有没有办法在不使用Any(或者转换为Any)的情况下获取类?
3 回答
更改您的类型以表明它不可为空,它应该工作 . 您可以通过指示
T
需要扩展Any
(而不是Any?
)来执行此操作 .首先,让我们解决它
使泛型类型
T
不可为空:通过default,上限是
Any?
而不是Any
:旁注:你正在使用!!不正确
这不是你在使用
!!
时所做的 . 相反,你告诉编译器:我不要害怕NullpointerException
.正如我上面所说的那样,当调用
!!
的类型实际上是null
时会引起很多麻烦 . 然后,与Java相同,NPE将在运行时抛出 .您想使用
reified
类型 . 您可以了解有关已知类型参数here或here的详细信息 . 代码: