欢迎光临
我们一直在努力

Kotlin数据类与密封类实战指南

Kotlin 数据类与密封类

数据类(Data Class)

数据类是 Kotlin 中用于简化数据存储和操作的类,自动生成 equals()、hashCode()、toString() 等方法。

定义数据类:

data class User(val name: String, val age: Int)

数据类自动生成的方法示例:

val user1 = User("Alice", 25)
val user2 = User("Alice", 25)
println(user1 == user2) // true,自动生成的 equals() 方法
println(user1.hashCode()) // 自动生成的 hashCode()
println(user1.toString()) // User(name=Alice, age=25)

解构声明:

val (name, age) = user1
println("Name: $name, Age: $age") // Name: Alice, Age: 25

密封类(Sealed Class)

密封类用于限制类的继承结构,所有子类必须在同一文件中声明,适合表示有限的类型集合。

定义密封类:

sealed class Result
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()

使用密封类:

fun handleResult(result: Result) {
when (result) {
is Success -> println("Success: ${result.data}")
is Error -> println("Error: ${result.message}")
}
}

数据类与密封类的结合

密封类常用于封装多种数据类,实现更安全的状态管理。

示例:

sealed class NetworkResponse
data class Success(val data: String) : NetworkResponse()
data class Failure(val error: String) : NetworkResponse()
object Loading : NetworkResponse()

fun processResponse(response: NetworkResponse) {
when (response) {
is Success -> println("Data: ${response.data}")
is Failure -> println("Error: ${response.error}")
Loading -> println("Loading…")
}
}

数据类的实用扩展

数据类可以结合扩展函数实现更多功能。

示例:

data class Product(val name: String, val price: Double)

fun Product.discountedPrice(discount: Double): Double {
return price * (1 – discount)
}

val product = Product("Laptop", 1000.0)
println("Discounted price: ${product.discountedPrice(0.1)}") // 900.0

密封类的模式匹配优势

密封类的 when 表达式无需 else 分支,编译器会检查所有可能的情况。

示例:

sealed class Shape
data class Circle(val radius: Double) : Shape()
data class Square(val side: Double) : Shape()

fun calculateArea(shape: Shape): Double {
return when (shape) {
is Circle -> Math.PI * shape.radius * shape.radius
is Square -> shape.side * shape.side
}
}

通过数据类和密封类,Kotlin 提供了更简洁、安全的代码组织方式,适用于状态管理、API 响应封装等场景。

赞(0)
未经允许不得转载:171主机测评 » Kotlin数据类与密封类实战指南
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址