您当前的位置: 首页 >  Java

蓝不蓝编程

暂无认证

  • 2浏览

    0关注

    706博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

为什么Kotlin属性访问方式比Java的Get/Set方式好

蓝不蓝编程 发布时间:2019-04-08 14:59:54 ,浏览量:2

简要介绍

一开始接触Kotlin,就发现Kotlin是采用属性访问的,和之前Java的Get/Set方法不一样.不过感觉这也没有什么牛B的,因为Java只要把字段设置为public,那也是可以通过属性访问的.

类样例
  1. Java代码
public class User {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  1. Kotlin代码(相比于Java,简介很多啊)
class User {
    var name :String?=null
}
访问方式对比
  1. Java方式(通过Get/Set):
user.setName("jerry");
String name = user.getName();
  1. Kotlin方式
user.name = "jerry"
val name = user.name
  1. Java属性方式(属性设置为public)
user.name = "jerry";
String name = user.name;
差异分析
  1. Java里属性之所以提倡采用Get/Set访问,是因为希望提供一种隔离以适应变化. 如上面User中的name属性,虽然我们设置为jerry,但是如果希望获取name时变成大写的,那就可以在Get或Set方法中做文章,而Java方式如果改成属性方式后,则无法再采用上面方式适应变化了.
public String getName() {
    return name.toUpperCase();
}

public void setName(String name) {
    this.name = name.toUpperCase();
}
  1. 那Kotlin是适应上述变化,该如何做呢?
var name :String?=null
    get() = field?.toUpperCase()

var name :String?=null
    set(value) {
        field = value?.toUpperCase()
    }

如果要将属性设置为只读的,可以在get前面增加private即可.

var name :String?=null
    private set
进阶

Kotlin的属性方式,还可以进一步简化: 由

class User {
    var name :String?=null
}

精简为一行: class User (name: String) 那这样写时,又如何定制get/set方法呢? 看起来要麻烦一些,不过当不用定制时,那是相当简洁啊.

class User constructor(name: String) {
    var name: String
        get() = field.toUpperCase()

    init {
        this.name = name
    }
}

class User constructor(name: String) {
    var name: String = ""
        set(value) {
            field = value.toUpperCase()
        }

    init {
        this.name = name
    }
}
总结

Kotlin相比于Java的写法更为简洁,同时又保持了扩展性,故值得一试哦.

安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061 点击关注专栏,查看最新技术分享 更多技术总结好文,请关注:「程序园中猿」

关注
打赏
1639405877
查看更多评论
立即登录/注册

微信扫码登录

0.0382s