
上QQ阅读APP看书,第一时间看更新
6.1.1 Any是基类
Kotlin中的所有类都继承自Any,Any映射到Java中的对象。如果一个函数将接受不同类型的对象作为参数,那么你可以将其类型指定为Any。同样,如果不能指定要返回的特定类型,则可以返回Any。从类型的角度来看,Any类为你提供了最大的——通常也是太多的——灵活性,所以要慎重使用它。
Any的目的不是让我们将变量、参数或返回类型定义为Any,尽管有时我们可能想这样做,而是提供了一些通用方法,这些方法可用于所有Kotlin类型。例如,像equals()、hashCode()和toString()这样的方法可以在Kotlin中的任何类型上调用,因为这些方法是用Any实现的。
即使字节码中的Any映射到Java中的对象,它们也不完全相同。此外,Any通过扩展函数提供了一些特殊的方法。例如,5.2节中所看到的to()扩展函数就是一个很好的例子。由于创建一对不同的对象是一种非常常见的操作,并且Pair与helper函数一起被广泛用于创建映射,因此Kotlin决定创建to()方法,该方法创建一对任意类型的对象,在每种类型的对象上都通用。
同样,在对象的上下文中执行代码块可以删除大量冗长和重复的代码。为了方便实现这一点,Any具有诸如let()、run()、apply()和also()等扩展函数——我们将在12.5节中探讨这些函数。通过使用这些方法,你可以消除很多混乱。这些对于在Kotlin中创建高度流畅的内部DSL也很有用,你将在第13章中看到。