美文网首页
聊聊kotlin的val跟var

聊聊kotlin的val跟var

作者: 韦东锏 | 来源:发表于2021-03-01 09:06 被阅读0次

    了解kotlin,最先接触的就是val跟var了,下面详细说说这两个字段的特性

    val

    val:英文读value,代表是immutable, 只读的意思 比如下面这个kotlin代码

    val item = "I am val"

    转成对应的java代码如下

    @NotNull
    

    声明了一个final的String,并且设置了一个get方法,确实说明了val的修饰的变量,只能赋值一次,后续无法再次赋值

    如果我在前面加个private修饰符

    private val name = "I am val"

    对应的java代码

    private final String name = "I am val";
    

    可以发现,对应的get方法没有了

    其实这种写法,真的是非常的优雅;

    对于java来说,很多人声明一个变量的时候,常常忘记加final修饰语,从而埋下了隐患,比如这个变量传到其他方法中,或者再其他的使用中,不小心给他重新赋值,或者把这个变量置空,导致了其他不可预期的问题

    但是kotlin只需要一个val就可以快速实现这个特性,很方便优雅

    这一点,在java的圣经《Effective Java》中,也有提及,叫做:

    Minimize mutability

    Immutable classes are easier to design, implement, and use than mutable classes. They are less prone to error and are more secure.

    所以使用val是一种更安全,更不容易出错的写法,再后续的开发中,应该尽量使用val修饰符 就像里面所说的

    Image

    var

    var:英文读variable,变量的意思,也就是指的mutable 比如下面这个kotlin代码

    var item = "I am var"

    对应的java代码

    @NotNull
    

    var做了三件事

    1. 声明了一个private变量
    2. 生成了对应的get方法
    3. 生成了对应的set方法

    不知细心的你有没有注意到,set方法的参数有一个@NotNull的修饰符,还有一个Intrinsics.checkParameterIsNotNull(var1, "<set-?>")的方法

    如果编译期可以判断是null,不小心传了null,这里就会编译不过,提示你修复,如果编译器判断不了,避免错误,在运行的时候,也会直接崩溃来提示你

    简简单单的一个修饰符,却可以帮我们做这么多事情,是不是深深迷上了kotlin了

    写到这里,对于自动生成的get方法跟set方法,如果我们要自定义实现,要怎么办

    可以用下面的方式

    var name = "I am var"
    

    需要注意的是,kotlin的set方法,取当前的变量,是用field这个关键字

    这个是对应的java的代码

    @NotNull
    

    可以看出来,对应的get跟set方法都变了

    简简单单的val跟var,其实隐藏了很多信息,这里做个介绍 有任何疑问,欢迎微信交流

    相关文章

      网友评论

          本文标题:聊聊kotlin的val跟var

          本文链接:https://www.haomeiwen.com/subject/ttmofltx.html