Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 类型推断与类型转换

类型推断与类型转换

类型推断

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")
}

最佳实践

  1. 优先使用类型推断简化代码
  2. 数值转换时使用显式的 toXxx() 方法
  3. 对可能为 null 的类型使用安全转换 as?
  4. 充分利用智能转换减少显式类型检查

示例代码

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 代码既简洁又安全。

Last Updated:: 5/21/25, 7:58 PM