类型推断与类型转换
类型推断
Kotlin 是一门静态类型语言,但它通过类型推断机制,可以在许多情况下省略显式的类型声明。编译器能够根据上下文自动推断变量或表达式的类型。
基本用法
val name = "Kotlin" // 编译器推断为 String 类型
val age = 25 // 编译器推断为 Int 类型
val price = 9.99 // 编译器推断为 Double 类型
显式声明类型
尽管类型推断很方便,但在某些情况下显式声明类型可以提高代码可读性:
val message: String = "Hello"
val count: Int = 100
类型转换
Kotlin 中的类型转换比 Java 更安全,不支持隐式转换(如 Java 中 int 自动转为 long)。必须显式进行类型转换。
基本类型转换
Kotlin 为基本数值类型提供了转换方法:
val intValue: Int = 100
val longValue: Long = intValue.toLong() // Int → Long
val doubleValue: Double = intValue.toDouble() // Int → Double
常用转换方法包括:
toByte()toShort()toInt()toLong()toFloat()toDouble()toChar()
智能转换(Smart Cast)
Kotlin 编译器会在可能的情况下自动进行安全类型转换:
fun printLength(obj: Any) {
if (obj is String) {
// 这里 obj 自动转换为 String 类型
println(obj.length)
}
}
强制转换(as 运算符)
当确定对象类型时,可以使用 as 进行强制转换:
val obj: Any = "Kotlin"
val str: String = obj as String
注意:如果转换失败会抛出 ClassCastException。可以使用安全转换运算符 as?:
val obj: Any = 123
val str: String? = obj as? String // 转换失败返回 null
类型检查(is 运算符)
使用 is 或 !is 检查对象类型:
when (obj) {
is String -> println("It's a String")
is Int -> println("It's an Int")
else -> println("Unknown type")
}
最佳实践
- 优先使用类型推断简化代码
- 数值转换时使用显式的
toXxx()方法 - 对可能为 null 的类型使用安全转换
as? - 充分利用智能转换减少显式类型检查
示例代码
fun main() {
// 类型推断示例
val languages = listOf("Kotlin", "Java", "Python") // 推断为 List<String>
// 类型转换示例
val number: Any = 42
if (number is Int) {
println(number.inc()) // 智能转换为 Int
}
// 安全转换
val text: Any = "Hello"
val str: String? = text as? String
println(str?.length)
}
通过合理使用类型推断和类型转换,可以使 Kotlin 代码既简洁又安全。
