Kotlin语言类,field关键字,计算属性,防范竟态条件学习

一、Kotlin语言定义类与field关键字学习

class KtBase70 {
    var name = "Derry"
    /* 背后做的事情
        @NotNull
        private String name = "Derry"
        
        @NotNull
        public void setName(@NotNullString name) {
            this.name = name;
        }
        
        @NotNull
        public String getName() {
            return this.name
        }
        
    */
    var value= "abcdsae"
        //下面的隐式代码,不写也有,就是下面这个样子
        get() = field
        set(value) {
            field = value
        }
    
    var info = "hhhhhhhhhh"
        get() = field.capitalize()  //把首字母修改成大写
        set(value) {
            field = "**[$value]**"
        }
    /*背后做的事情:
        private String info = "hhhhhhhhhh"

        @NotNull
        public void setInfo(@NotNullString info) {
            this.info= "**[" + info + "]**";
        }
        
        @NotNull
        public String getInfo() {
            return StringKt.capitalize(this,info)
        }
    */
}

fun main() {
    //背后隐式代码:new KtBase70().setName("Ke");
    KtBase70().name = "ke"
   
    println(KtBase70().info)

    ktBase70().info = "xxKT"
}

二、Kotlin语言的计算属性 和 防范竟态条件

class KtBase71 {
    val number : Int = 0
    /*
        private int number = 0
        public int getNumber() {
            return this.number;
        }
    */
        
    //计算属性 下面这样写  get函数覆盖了 field内容本身,相当于field失效 
    val number2 : Int
        get() = (1..1000).shuffled().first()  //从1到1000取出随机值,返回给getNumber2函数
    /*背后隐式代码:
        //为什么没有看到number2属性定义
        //因为属于计算属性的功能,根本在getNumber2函数里面,就没有用到number2属性,所以number2属性失效
        public int getNumber2() {
            return (1..1000).shuffled().first()java的逻辑;
        }
    */
    
    var info : String ?= ""
    //防范竟态条件  当你调用成员,可以为null,可能为空值,就必须采用防范竟态条件,这个是KT编程的规范
    fun getShowInfo() : String {
        //这种写法,就舒服防范竟态条件,我们可以看到专业的KT开发者,有大量这种代码
        //also永远返回info本身
        //let返回最后一行
        return info?.let{
            if (it.isBlank()) {
                 "为空,请检查"
            } else {
                "最终info结果是:$it"
            }
        } ?: "null,请检查"
    }
}

fun main() {
    //println(new ktBase71().getNumber())
    println(ktBase71.number)
    
    //这个会报错,因为这个类没有set函数
    //ktBase71.number = 9

    //getNumber2()
    println(KtBase71().number2)

    //getShowInfo()
    println(KtBase71().getShowInfo())
}

你可能感兴趣的:(Kotlin,java,开发语言)