Wie*_*lol 3 generics types kotlin
给出以下代码:
fun <T> getClass(instance: T): Class<T>
{
return instance.javaClass
}
Run Code Online (Sandbox Code Playgroud)
我只是有一个具有类型参数和该类型变量的函数.
我想获取该实例的类,所以我调用.javaClass
问题是上面的代码给出了编译器错误,因为.javaClass只能在Any的实例上完成而且T不是Any的子类型
修复此问题的方法是将通用类型T替换为T:Any,但这会增加一些噪音
可空性(又名?)可能是原因,但我不确定这是否属实,如果是,为什么.
所以,问题是,有什么不是Any的子类型吗?
Any?不是类型的子类型Any,因为类型的每个有效值都不是类型Any?的有效值Any.
没有T : Any限制,您可以将您的功能称为,例如:
val x = getClass<Any?>(null)
Run Code Online (Sandbox Code Playgroud)
...它会在运行时崩溃,所以Kotlin不允许这个代码编译.
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |