Kotlin学习(二)-------绝对震撼你的kotlin数据类-data class
你所不了解的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相关推荐
- 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )
文章目录 I . List 集合高阶函数引入 II . Kotlin 数据类 ( data class ) III . Java 代码 与 Kotlin 代码实现对比 ( 查询年龄最大的 ) IV . ...
- kotlin - 数据类data
kotlin - 数据类data 在kotlin中数据类通过data关键字来修饰. 数据类需满足的条件 主构造器必须至少有一个参数 主构造器中的参数需要用var/val声明为属性 数据类不能用abst ...
- 学习MySQL,怎么能不会数据类型和schema优化!
作者 | 草捏子 来源 | 草捏子(ID:chaycao) 头图 | CSDN 下载自东方IC 本文就数据类型和schema方面的优化进行介绍. 选择优化的数据类型 MySQL支持的数据类型有很多, ...
- Kotlin学习二:类与对象
类 创建类 MyUtils,里面有一个值和获取的方法: class MyUtils {var a = 0fun get(): Int {return a} } 在 MainActivity 类中创建工 ...
- Kotlin学习笔记(三):Kotlin中的函数
一.函数的特性语法 函数的几种声明形式 //普通声明形式fun sayHello(str: String){print(str)}//允许参数有默认值,可用于方法重载fun printName(str ...
- Kotlin学习与实践 (十)Kotlin的可空性
可空类型 * 类型就是数据的分类.决定了该类型可能的值,以及在该类型值上可以完成的操作. * 与Java不同,Kotlin对可空类型的显示的支持.可空类型是Kotlin类型系统中帮助避免NullPoi ...
- Kotlin学习笔记(3)- 语法
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...
- Kotlin学习笔记(1)- 环境配置
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...
- kotlin学习目录
目录 kotlin学习之基础(一) kotlin学习之函数(二) kotlin学习之类(三) kotlin学习之类的扩展(四) kotlin学习之密封类(五) kotlin学习之嵌套类和内部类(六) ...
最新文章
- 太赞!639页《深度学习:Deep Learning》硬核课程PPT下载
- mpvue 小程序如何开启下拉刷新,上拉加载?
- Rectangular inference 矩形推理
- 动态数组 allocator
- JAVA JDK老版本删除不彻底,环境变量设置无效,如何彻底卸载JAVA环境?
- javaweb学习总结(七)——HttpServletResponse对象(一)
- 功能自动化工具watiJ(转载)
- win7锁定计算机要输入密码登陆,在win7中,怎么解决开机要输入用户密码
- 1070 结绳 (25 分
- 字符设备驱动高级篇5——静态映射表、动态映射结构体方式操作寄存器
- python中除法 / 和// 区别 以及np.divide,np.true_divide,np.floor_divide方法区别
- pycharm使用心得
- QT--学习疑惑探索
- 融云android系统消息,如何解决 嵌入融云SDK后, Android 手机收不到消息推送?
- C语言循环语句的用法——while循环
- win10无法访问xp计算机,WinXP无法访问Win10共享文件夹,拒绝访问怎么办?
- 计算机信函 教案模板,一年级信息技术课教案模板三篇
- SPI协议(一):读SPI_Flash(M25P16)设备ID
- hadoop组件---面向列的开源数据库(九)--python--python使用thrift连接hbase
- DO-214AC封装尺寸图
热门文章
- solidity 学习记录1
- 互联网发展十几年,你错过了哪些创业机会
- echarts社区水球图、echart水球图 动态水球图
- 重复性工作再也不用做啦?机器人自动化迎难而上
- android 应用联想,联想推出Android应用商店 面向大型企业
- 资源 步金国 的高手
- 带符号整数中负数采用什么编码_在个人计算机中,带符号整数中负数是采用________编码方法表示的。...
- C语言 任意次方后的三位数
- 科技学习:第1篇 无人驾驶技术概述
- AI人工智能毕业设计课题:怀旧照片网站,黑白图像图片上色系统