Any类型
Any 是 Kotlin 类层次结构的根。每个 Kotlin 类都将 Any 作为其父类。这意味着 Any 是你在 Kotlin 中定义的任何类的父类,它与 Java 中的 Object 完全等效。
下面是 Any 类的定义:
public open class Any {
/**
* 判断某个对象是否与当前对象相等。
*/
public open operator fun equals(other: Any?): Boolean
/**
* 返回对象的哈希码值。hashCode 的一般约定是:
*
*/
public open fun hashCode(): Int
/**
* 返回对象的字符串表示。
*/
public open fun toString(): String
}
在上面的示例中,可以看到 Any 类提供了 equals、hashCode 和 toString 方法。这些方法可以在任何 Kotlin 类中使用,因为每个类都是 Any 类的子类。
Nothing 类型
在 Kotlin 中,可以使用 Nothing 类型表示“永远不存在的值”。例如,如果一个函数的返回类型为 Nothing,那么它意味着该函数永远不会返回(总是抛出异常)。
下面是 Nothing 类型的定义:
public class Nothing private constructor() {
// Nothing 类没有实例
}
上面的定义意味着你无法实例化这个类,也意味着没有其他类可以继承它。
以下是一个使用 Nothing 的函数示例,该函数总是抛出异常,永远不会返回任何值:
fun error(message: Any): Nothing {
throw IllegalStateException(message.toString())
}
上述函数始终抛出异常,不会返回任何值。需要注意的是,必须明确指定 Nothing 作为返回类型,否则返回类型仍然是 Unit。
Unit 类型
Unit 类型是只有一个值的类型,即 Unit
对象。这个类型对应于 Java 中的 void
类型。
以下是 Unit 类型的定义:
public object Unit {
override fun toString() = "kotlin.Unit"
}
在 Kotlin 中,如果你没有显式指定函数的返回类型,那么函数的默认返回类型是 Unit。这意味着如果函数的返回类型没有显式指定,Kotlin 编译器将使用 Unit 作为返回类型。
下面的示例展示了两个行为相似的函数:
fun display() {
print("kotlin")
}
fun display(): Unit {
print("kotlin")
}
在上面的示例中,这两个函数的行为是相似的。如果没有指定返回类型,Kotlin 编译器会将其默认设置为 Unit。