- 课程名称:一课掌握Kotlin 突破开发语言瓶颈
- 章节名称:
- 第4章:类型初步
- 4-2扩展方法
- 第4章:类型初步
- 讲师姓名:bennyhuo
- 时间:2022-08-13 09:39
课程内容
-
把类中没有定义的方法给添加一个
-
定义方法:
fun 类名.扩展方法名(): 类型名 { } fun String.isEmail(): Boolean {// 给String类增加一个isEmail方法,String就是一个receiver }
-
实践例子
fun String.padding(count: Int, char: Char = ' '): String { // 下面语句解释:把char变量内容用用空白符为间隔连接起来,连接数量由区间决定 val padding = (1..count).joinToString(""){ char.toString() } return "$padding$this$padding" }// 在receiver的字符串前后添加指定字符内容 fun String.times(count: Int): String { return (1..count).joinToString("") { this } }// 把指定字符串重复count遍
-
更多例子
class PoorGuy// 定义一个类,没有类定义体 fun PoorGuy.noMoney() {// 给这个类定义一个扩展方法 } var PoorGuy.moneyLeft: Double// 给这个类定义一个扩展属性 get() { return 0.0// 不能用return filed这个field是代表类的状态,而这个property是定义在类的外部 // 即是类的扩展属性,是不能获得类的backing field } set(value) { }
class PoorGuy { var pocket: Double = 0.0 } var PoorGuy.moneyLeft: Double get() { return this.pocket } set(value) { pocket = value }
interface Guy { var moneyLeft: Double get() { return 0.0// 也不能return field } set(value) { // 不能把这个值赋给任何位置 } fun noMoney() {// 可以有默认方法实现 println("No money left") } }
-
扩展方法的类型
学习心得
扩展方法是一个不小的门槛,多看了几遍,感觉有些理解了