Kotlin——幕后属性、延迟初始化属性

kotlin 复制代码
class BackingProgress(name:String){
    //定义private修饰的属性,该属性是幕后属性
    private var _name:String =name

    /**
     * 幕后属性主要是实现封装和数据的隐藏,幕后属性允许开发者为类的属性创建一个隐藏的、
     * 私有的字段,这个字段只有内部方法可以访问,通过幕后属性,可以将属性的读写操作
     * 封装在内部类时间中,对外只暴露安全的访问方法,这样,可以在不破坏封装的前提下,对
     * 内部数据执行额外的操作
     */
    var name
        //重写getter方法,返回幕后属性的值
        get() = _name
        set(newName){
            //执行合理性校验,要求用户名必须在2~6位之间
            if (newName.length >6 ||newName.length<2){
                println("您设置的人名不符合要求")
            }else{
                //对幕后属性赋值
                _name = newName
            }
        }
}

fun main(args: Array<String>) {
    var p =BackingProgress("李刚")
    //访问p.name,实际商会转为访问幕后属性_name
    println(p.name)
    //对p.name赋值,实际上会转为对幕后属性_name赋值
    p.name = "孙悟空"
    println(p.name)
}

延迟初始化属性

kotlin 复制代码
class User {
    lateinit var name: String
    lateinit var birth:Date
}
fun main(args: Array<String>) {
    var user = User()
//    println(user.name) //lateinit property name has not been initialized
    user.name ="你好你好"
    println(user.name)
}
相关推荐
wangruofeng1 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
wangruofeng1 小时前
给前端开发者的 100 个设计参考网站
前端·设计
M--Y3 小时前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
星栈4 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技4 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户47949283569154 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马7 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng7 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding8 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js
johnjincaaaa8 小时前
猿人学第 18 题「jsvmp 洞察先机」逆向通关实录
javascript·后端