推荐答案
data class User(val name: String, val age: Int)
在 Kotlin 中,数据类(data class)具有以下特性:
- 自动生成
toString()方法:数据类会自动生成一个包含所有属性的toString()方法。 - 自动生成
equals()和hashCode()方法:数据类会自动生成equals()和hashCode()方法,用于比较对象的相等性和哈希值。 - 自动生成
copy()方法:数据类会自动生成一个copy()方法,用于复制对象并允许修改部分属性。 - 自动生成
componentN()函数:数据类会自动生成componentN()函数,用于解构声明(destructuring declarations)。 - 主构造函数必须至少有一个参数:数据类的主构造函数必须至少有一个参数,且这些参数必须标记为
val或var。 - 不能是抽象的、开放的、密封的或内部的:数据类不能是抽象的、开放的、密封的或内部的。
本题详细解读
1. 自动生成 toString() 方法
数据类会自动生成一个 toString() 方法,该方法返回一个包含类名和所有属性的字符串表示。例如:
val user = User("Alice", 25)
println(user) // 输出: User(name=Alice, age=25)2. 自动生成 equals() 和 hashCode() 方法
数据类会自动生成 equals() 和 hashCode() 方法,用于比较对象的相等性和哈希值。例如:
val user1 = User("Alice", 25)
val user2 = User("Alice", 25)
println(user1 == user2) // 输出: true3. 自动生成 copy() 方法
数据类会自动生成一个 copy() 方法,用于复制对象并允许修改部分属性。例如:
val user = User("Alice", 25)
val updatedUser = user.copy(age = 26)
println(updatedUser) // 输出: User(name=Alice, age=26)4. 自动生成 componentN() 函数
数据类会自动生成 componentN() 函数,用于解构声明(destructuring declarations)。例如:
val user = User("Alice", 25)
val (name, age) = user
println("Name: $name, Age: $age") // 输出: Name: Alice, Age: 255. 主构造函数必须至少有一个参数
数据类的主构造函数必须至少有一个参数,且这些参数必须标记为 val 或 var。例如:
data class User(val name: String, val age: Int)
6. 不能是抽象的、开放的、密封的或内部的
数据类不能是抽象的、开放的、密封的或内部的。例如,以下代码会导致编译错误:
abstract data class User(val name: String, val age: Int) // 错误: 数据类不能是抽象的
通过这些特性,Kotlin 的数据类提供了一种简洁的方式来定义主要用于存储数据的类。