扩展译文见这里
kotlin支持扩展函数和扩展属性。
扩展静态解析的
- 扩展不会真正的插入成员。
- 扩展函数是由函数调用的表达式的类型决定的。(而不是类实例)
- 在函数模型上“一模一样”的成员函数和扩展函数,永远使用成员函数
注意可以为可空的箱体定义扩展函数
扩展属性
注意:扩展属性不能有初始化器,其行为只能有显示提供的Getter/Setter定义。
关于扩展声明为成员
能别瞎扩展就别瞎扩展
扩展函数能访问被扩展类(其实例为扩展接收者?)的成员函数、也可以访问编写扩展的类(其实例为分发接收者?)的成员函数。
当重名时,优先访问扩展接收者,访问分发接收者使用this语法
数据类
数据类译文见这里
虽然按照之前类声明章节,声明一个数据类已经很简单了,配合主构造函数几乎没有啥代码量
kotlin中还可以使用data关键字定义声明数据类:
data class User(val name: String, val age: Int)
可以自动推导出:
- equals()/hashCode() 对,
- toString() 格式是 “User(name=John, age=42)”,
- componentN() 函数 按声明顺序对应于所有属性,
- copy() 函数。
密封类
密封类用来表示受限的类继承结构:当一个值为有限集中的类型、而不能有任何其他类型时。在某种意义上,他们是枚举类的扩展:枚举类型的值集合也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例。
关键字:sealed
详情见这里
可以看看demo,这个还是有用的。