Kotlin有什么不是Any的子类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin有什么不是Any的子类型相关的知识,希望对你有一定的参考价值。

给出以下代码:

fun <T> getClass(instance: T): Class<T>
{
     return instance.javaClass
}

我只是有一个具有类型参数和该类型变量的函数。

我想获取该实例的类,所以我调用.javaClass

问题是上面的代码给出了编译器错误,因为.javaClass只能在Any的实例上完成而且T不是Any的子类型

修复此问题的方法是将通用类型T替换为T:Any,但这会增加一些噪音

可空性(又名?)可能是原因,但我不确定这是否属实,如果是,为什么。

所以,问题是,有什么不是Any的子类型吗?

答案

Any?不是Any的子类型,因为并非Any?类型的每个有效值都是Any类型的有效值。

没有T : Any限制,你可以调用你的函数,例如:

val x = getClass<Any?>(null)

...它会在运行时崩溃,所以Kotlin不允许这个代码编译。

以上是关于Kotlin有什么不是Any的子类型的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin返回值UnitNothing与Any

Kotlin基础 Any和Any?

Kotlin基础 Any和Any?

Android kotlin Object Any 类型不匹配

Kotlin - 类型不匹配:推断类型是 Any?但布尔值是预期的

Kotlin 继承