class UserInfo private constructor(
val name: String,
val age: Int,
private val email: String
) {
// 提供一个工厂方法来创建实例
companion object {
fun createUserInfo(name: String, age: Int, email: String): UserInfo {
return UserInfo(name, age, email)
}
}
// 提供安全的访问方式
fun getEmail(): String {
return email
}
}
不可变性策略解释
- 使用
val
关键字:对于 name
和 age
属性,使用 val
声明。在Kotlin中,val
声明的属性一旦初始化,其值就不能再被修改。这确保了这些属性在外部不可变。
- 私有构造函数:类的构造函数设为
private
,这样外部代码无法直接通过构造函数创建实例,只能通过我们提供的 createUserInfo
工厂方法来创建实例。这进一步控制了对象的创建过程,保证对象状态的一致性。
数据封装策略解释
- 属性可见性控制:
email
属性声明为 private
,这意味着外部代码无法直接访问该属性,保证了数据的安全性。
- 提供访问方法:通过
getEmail
方法,以一种受控的方式提供对 email
属性的访问。这样,我们可以在方法内部添加逻辑(如数据验证、日志记录等),而外部代码只能通过这个方法来获取 email
,从而实现了数据封装。