给出以下代码:

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

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

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

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

解决此问题的方法是将通用类型T替换为T:任何,但这会增加一些噪音

可为空性(又名“是吗?”)可能是原因,但我不确定这是否成立,如果确定,为什么。

因此,问题是,是否有任何不是Any子类型的东西?

最佳答案

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

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

val x = getClass<Any?>(null)

...这会在运行时崩溃,因此Kotlin不允许编译此代码。

07-24 09:49
查看更多