你所不了解的Kotlin数据类(data class)


回顾Java

Java中我们在定义一个POJO,DTO这些要遵循JavaBean原则的实体类的时候,我们要写属性对应的setXxx和getXxx,以及equals(),toString(),hashCode()这些方法呢?
比如像如下这样:
public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age &&Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}

你是都感觉为了写一个实体类非常的耗时间,而且代码看起来非常的冗长

再看看Kotlin,代码简单到令你震撼

data class Person(var name :String, var age :Int)

是不是觉得不可思议,小编我肯定的告诉你,没有看错,就是这么简单。就这么简单的定义,kotlin的这个数据类就有了setter和getter,以及toString()、equals()、hashCode()方法,而且还有你想想不到的特性在里面。

使用数据类

fun main(args: Array<String>) {var p = Person("huahua",11)var p1 = Person("huahua",11)println(p.equals(p1))//调用equals()方法,输出trueprintln(p.name) //调用数据类的getterp.name = "wawa" //调用数据类的setterprintln(p) // 自动调用toString()方法println(p.hashCode())  //调用hashCode()方法,输出内存地址}

仔细看看上面的Kotlin代码,是不是数据类该有的方法都有了,实际上,如果不满意自动为你生成的这些方法,你可以自己定义,覆盖自动生成的

数据类自带解构方法——componentN()

首先,我来说说我自己对解构的理解(自我理解,还请大家指正),解构是把原来的解构解开,比如person有name和age的属性,解开解构就是单独的name 和 age了,不在绑定在person数据类了

    var (name,age) = p  //解构pprintln("$name $age")

实际上,解构是调用了Person类的component1()和component2()函数,其中1代表声明在第一位的属性对应的解构函数。
解构有利于利用我们的数据类的属性,不需要调用一大堆的getter了

结语:

虽然,kotlin在编程语言上的排名还是排不上号,但是我是真心喜欢Kotlin的,简洁,很大程度提高了编程的效率。小编会为kotlin继续发博客,和大家喜欢kotlin的朋友一起学习,一起进步。

Kotlin学习(二)-------绝对震撼你的kotlin数据类-data class相关推荐

  1. 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )

    文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...

  2. kotlin - 数据类data

    kotlin - 数据类data 在kotlin中数据类通过data关键字来修饰. 数据类需满足的条件 主构造器必须至少有一个参数 主构造器中的参数需要用var/val声明为属性 数据类不能用abst ...

  3. 学习MySQL,怎么能不会数据类型和schema优化!

    作者 | 草捏子 来源 | 草捏子(ID:chaycao) 头图 |  CSDN 下载自东方IC 本文就数据类型和schema方面的优化进行介绍. 选择优化的数据类型 MySQL支持的数据类型有很多, ...

  4. Kotlin学习二:类与对象

    类 创建类 MyUtils,里面有一个值和获取的方法: class MyUtils {var a = 0fun get(): Int {return a} } 在 MainActivity 类中创建工 ...

  5. Kotlin学习笔记(三):Kotlin中的函数

    一.函数的特性语法 函数的几种声明形式 //普通声明形式fun sayHello(str: String){print(str)}//允许参数有默认值,可用于方法重载fun printName(str ...

  6. Kotlin学习与实践 (十)Kotlin的可空性

    可空类型 * 类型就是数据的分类.决定了该类型可能的值,以及在该类型值上可以完成的操作. * 与Java不同,Kotlin对可空类型的显示的支持.可空类型是Kotlin类型系统中帮助避免NullPoi ...

  7. Kotlin学习笔记(3)- 语法

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  8. Kotlin学习笔记(1)- 环境配置

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  9. kotlin学习目录

    目录 kotlin学习之基础(一) kotlin学习之函数(二) kotlin学习之类(三) kotlin学习之类的扩展(四) kotlin学习之密封类(五) kotlin学习之嵌套类和内部类(六) ...

最新文章

  1. 太赞!639页《深度学习:Deep Learning》硬核课程PPT下载
  2. mpvue 小程序如何开启下拉刷新,上拉加载?
  3. Rectangular inference 矩形推理
  4. 动态数组 allocator
  5. JAVA JDK老版本删除不彻底,环境变量设置无效,如何彻底卸载JAVA环境?
  6. javaweb学习总结(七)——HttpServletResponse对象(一)
  7. 功能自动化工具watiJ(转载)
  8. win7锁定计算机要输入密码登陆,在win7中,怎么解决开机要输入用户密码
  9. 1070 结绳 (25 分
  10. 字符设备驱动高级篇5——静态映射表、动态映射结构体方式操作寄存器
  11. python中除法 / 和// 区别 以及np.divide,np.true_divide,np.floor_divide方法区别
  12. pycharm使用心得
  13. QT--学习疑惑探索
  14. 融云android系统消息,如何解决 嵌入融云SDK后, Android 手机收不到消息推送?
  15. C语言循环语句的用法——while循环
  16. win10无法访问xp计算机,WinXP无法访问Win10共享文件夹,拒绝访问怎么办?
  17. 计算机信函 教案模板,一年级信息技术课教案模板三篇
  18. SPI协议(一):读SPI_Flash(M25P16)设备ID
  19. hadoop组件---面向列的开源数据库(九)--python--python使用thrift连接hbase
  20. DO-214AC封装尺寸图

热门文章

  1. solidity 学习记录1
  2. 互联网发展十几年,你错过了哪些创业机会
  3. echarts社区水球图、echart水球图 动态水球图
  4. 重复性工作再也不用做啦?机器人自动化迎难而上
  5. android 应用联想,联想推出Android应用商店 面向大型企业
  6. 资源 步金国 的高手
  7. 带符号整数中负数采用什么编码_在个人计算机中,带符号整数中负数是采用________编码方法表示的。...
  8. C语言 任意次方后的三位数
  9. 科技学习:第1篇 无人驾驶技术概述
  10. AI人工智能毕业设计课题:怀旧照片网站,黑白图像图片上色系统