MST

星途 面试题库

面试题:Kotlin不可变数据与数据封装的结合应用

假设有一个业务场景,需要设计一个用户信息类,该类中的某些属性一旦初始化后不允许被外部修改,同时需要对这些属性进行合理的数据封装以提供安全的访问方式。请用Kotlin代码实现这个类,并解释你使用的不可变性和数据封装的策略。
22.0万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
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
    }
}

不可变性策略解释

  1. 使用 val 关键字:对于 nameage 属性,使用 val 声明。在Kotlin中,val 声明的属性一旦初始化,其值就不能再被修改。这确保了这些属性在外部不可变。
  2. 私有构造函数:类的构造函数设为 private,这样外部代码无法直接通过构造函数创建实例,只能通过我们提供的 createUserInfo 工厂方法来创建实例。这进一步控制了对象的创建过程,保证对象状态的一致性。

数据封装策略解释

  1. 属性可见性控制email 属性声明为 private,这意味着外部代码无法直接访问该属性,保证了数据的安全性。
  2. 提供访问方法:通过 getEmail 方法,以一种受控的方式提供对 email 属性的访问。这样,我们可以在方法内部添加逻辑(如数据验证、日志记录等),而外部代码只能通过这个方法来获取 email,从而实现了数据封装。