我有一个函数,它接受泛型类型的一个参数,我想访问它的类:
fun <T> test(t: T) {
t::class
}
Run Code Online (Sandbox Code Playgroud)
这失败了"类文字中的表达式具有可空类型".没关系,我明白了(我可以Any?用作我的T和null价值).
但是,如果我将其更改t为非null的保证,它仍会失败并显示相同的错误消息:
fun <T> test(t: T) {
t!!::class
}
Run Code Online (Sandbox Code Playgroud)
在哪种情况下t!!::class还会造成麻烦?
有没有办法在不使用Any(或者转换为Any)的情况下获取类?
Tod*_*odd 45
更改您的类型以表明它不可为空,它应该工作.您可以通过指示T需要扩展Any(而不是Any?)来完成此操作.
fun <T : Any> test(t: T) {
t::class
}
Run Code Online (Sandbox Code Playgroud)
使泛型类型T不可为空:
fun <T: Any> test(t: T) {
println(t::class)
}
Run Code Online (Sandbox Code Playgroud)
通过默认情况下,该上限是Any?不是Any:
"默认上限(如果没有指定)是Any?.只能在尖括号内指定一个上限.如果同一个类型参数需要多个上限,我们需要一个单独的where子句."
!!不当"但是如果我把它改为保证t不是空的......"
这不是你在使用时所做的!!.相反,你告诉编译器:我不希望你检查我的类型的可空性.只需继续并调用该功能.我不怕NullpointerExceptions.
"在哪种情况下,t !! ::类仍会造成麻烦?"
正如我上面所说的那样,当!!调用的类型实际上是它时会引起许多麻烦null.然后,与Java相同,NPE将在运行时抛出.
| 归档时间: |
|
| 查看次数: |
3899 次 |
| 最近记录: |