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)
}
相关推荐
陆枫Larry7 小时前
Chromium和Chrome到底是什么关系?
前端
a1117767 小时前
模仿刀剑神域风格 作品集网页
前端·开源
a1117767 小时前
Elemental Sandbox(元素沙盒)-Three.js 游戏技能特效
前端·开源
用户69371750013847 小时前
前阵子刷屏的 Ox-Alpha 真身揭晓!GLM-5.3-Flash 上线,这价格真的杀疯了
前端·后端·github
四千岁7 小时前
抓包LangChain-了解LangChain的原理
前端·javascript·后端
南雨北斗7 小时前
TS方式构建Vue3 toast组件(一)
前端
IT小白杨8 小时前
2026游戏工作室环境隔离指南:从设备指纹到移动IP的部署实践
前端·经验分享·网络协议·tcp/ip·游戏·安全架构·指纹浏览器
用户298698530148 小时前
使用 JavaScript 在 React 中实现 Word 转 PDF
前端·javascript·react.js
悟空瞎说8 小时前
UICollectionViewLayout 全套源码 + 逐行中文注释 + 使用场景说明
javascript
hunterandroid8 小时前
[鸿蒙从零到一] @Observed 与 @ObjectLink 深层响应陷阱与最佳实践
前端