Kotlin数据类(八)

一、数据类
数据类是一种非常强大的类,它可以让你避免创建Java中的用于保存状态但又操作非常简单的POJO的模版代码。它们通常只提供了用于访问它们属性的简单的getter和setter。定义一个新的数据类非常简单:
data class Forecast(val date: Date, val temperature: Float, val details: String)
二、额外的函数
通过数据类,我们可以方便地得到很多有趣的函数,一部分是来自属性,我们之前已经讲过(从编写getter和setter函数):
equals(): 它可以比较两个对象的属性来确保他们是相同的。
hashCode(): 我们可以得到一个hash值,也是从属性中计算出来的。
copy(): 你可以拷贝一个对象,可以根据你的需要去修改里面的属性。一系列可以映射对象到变量中的函数。

三、复制一个数据类
如果我们使用不可修改的对象,假如我们需要修改这个对象状态,必须要创建一个新的一个或者多个属性被修改的实例。这个任务是非常重复且不简洁的。
举个例子,如果我们需要修改Forecast中的temperature(温度),我们可以这么做:
val f1 = Forecast(Date(), 27.5f, "Shiny day")
val f2 = f1.copy(temperature = 30f)
如上,我们拷贝了第一个forecast对象然后只修改了temperature的属性而没有修改这个对象的其它状态。

四、映射对象到变量中
映射对象的每一个属性到一个变量中,这个过程就是我们知道的多声明。这就是为什么会有componentX函数被自动创建。使用上面的Forecast类举个例子:
val f1 = Forecast(Date(), 27.5f, "Shiny day")
val (date, temperature, details) = f1
上面这个多声明会被编译成下面的代码:
val date = f1.component1()
val temperature = f1.component2()
val details = f1.component3()
这个特性背后的逻辑是非常强大的,它可以在很多情况下帮助我们简化代码。举个例子,Map类含有一些扩展函数的实现,允许它在迭代时使用key和value:
for ((key, value) in map) {
    Log.d("map", "key:$key, value:$value")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值