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)
}
相关推荐
小蜜蜂嗡嗡2 小时前
【flutter对屏幕底部有手势区域(如:一条横杠)导致出现重叠遮挡】
前端·javascript·flutter
伍哥的传说3 小时前
Vue 3 useModel vs defineModel:选择正确的双向绑定方案
前端·javascript·vue.js·definemodel对比·usemodel教程·vue3.4新特性·vue双向绑定
胡gh8 小时前
页面卡成PPT?重排重绘惹的祸!依旧性能优化
前端·javascript·面试
胡gh8 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
言兴8 小时前
# 深度解析 ECharts:从零到一构建企业级数据可视化看板
前端·javascript·面试
山有木兮木有枝_9 小时前
TailWind CSS
前端·css·postcss
烛阴9 小时前
TypeScript 的“读心术”:让类型在代码中“流动”起来
前端·javascript·typescript
杨荧9 小时前
基于Python的农作物病虫害防治网站 Python+Django+Vue.js
大数据·前端·vue.js·爬虫·python
Moment10 小时前
毕业一年了,分享一下我的四个开源项目!😊😊😊
前端·后端·开源
程序视点11 小时前
Escrcpy 3.0投屏控制软件使用教程:无线/有线连接+虚拟显示功能详解
前端·后端