Kotlin-嵌套类&数据类
1.嵌套类
如果一个类只对另一个类有用,那么将其嵌入到该类中并使这两个类保持在一起是合乎逻辑的,可以使用嵌套类
1 | class Player{ |
2.数据类
数据类,是专门设计用来存储数据的类
数据类提供了toString的个性化实现
==符号默认情况下,比较对象就是比较它们的引用值,数据类提供了equals和hashCode的个性化实现
- 有data关键词修饰
1 | data class Coordinate(var x: Int,var y: Int){ |
- 无data关键词修饰
数据类重写了equals和hashcode的实现
如果有data关键字修饰,结果为true;没有data关键字修饰,结果为false
1 | data class Coordinate(var x: Int,var y: Int){ |
2.1 Copy
出了重写Any类的部分函数,提供更好用的默认实现外,数据类还提供了一个函数,它可以用来方便地复制一个对象。假设想创建一个Student实例,除了name属性,它拥有和另一个现有Student实例完全一样的属性值,如果Student是个数据类,那么复制现有Student实例就很简单了,只要调用copy函数,给想修改的属性传入值参就可以了
除了改变了name这个属性,其它属性全部copy过来
1 | data class Student(var name: String,val age: Int){ |
2.2 解构声明
解构声明的后台实现就是声明component1,component2等若干个组件函数,让每个函数负责管理你想返回的一个属性数据,如果你定义一个数据类,它会自动为所有定义在主构造函数的属性添加对应的组件函数。
普通类的解构
1 | class PlayerScore(val experience: Int,val level: Int){ |
数据类会自动生成operator,支持解构语法
1 | data class PlayerScore(val experience: Int,val level: Int){ |
2.3 运算符重载
操作符 | 函数名 | 作用 |
---|---|---|
+ | plus | 把一个对象添加到另一个对象里 |
+= | plusAssign | 把一个对象添加到另一个对象里,然后将结果赋值给第一个对象 |
== | equals | 如果两个对象相等,则返回true,否则返回false |
> | compareTo | 如果左边的对象大于右边的对象,则返回true,否则返回false |
[] | get | 返回集合中指定位置的元素 |
.. | rangeTo | 创建一个range对象 |
in | contains | 如果对象包含在集合里,则返回true |
例:重载了’+’运算符,使’+’是x,y坐标相加
1 | data class Coordinate(var x: Int,var y: Int){ |