摘自第一行Android代码第3版
拓展函数
拓展函数表示技术在不修改某个类的源码情况下,仍然可以打开这个类,想该类添加新的函数
统计一段字符串中包包含的字母的数量
package com.example.fragmentbestpractice
/**
* Create with IntelliJ IDEA.
* Description:
* User: coco
* Date: 2022-01-05
* Time: 19:56
*/
object StringUtil {
fun lettersCount(str: String): Int {
var count = 0
for (char in str) {
if (char.isLetter()) {
count++
}
}
return count
}
}
fun main(){
val str = "ABC123xyz!@#"
val count = StringUtil.lettersCount(str)
println(count)
}
拓展函数的逻辑是把lettersCount这个方法加入到String类中
具体实现
package com.example.fragmentbestpractice
/**
* Create with IntelliJ IDEA.
* Description:
* User: coco
* Date: 2022-01-05
* Time: 20:19
*/
fun String.lettersCount(): Int {
var count = 0
for (char in this) {
if (char.isLetter()) {
count++
}
}
return count
}
fun main(){
val count = "ABCD123xyz!@#".lettersCount()
println(count)
}
运算符重载
类似python的魔法方法 add 等
让两个Money类对象相加
package com.example.fragmentbestpractice
/**
* Create with IntelliJ IDEA.
* Description:
* User: coco
* Date: 2022-01-05
* Time: 20:33
*/
class Money(val value: Int) {
// 这里使用operator 关键字来修饰plus()函数,这是必不可少的
operator fun plus(money: Money): Money {
val sum = value + money.value
return Money(sum)
}
// Kotlin允许我们对同一个运算符进行多次重载
operator fun plus(newValue: Int): Money {
val sum = value + newValue
return Money(sum)
}
}
fun main() {
val money1 = Money(5)
val money2 = Money(10)
val money3 = money1 + money2
println(money3.value)
val money4 = money3 + 20
println(money4.value)
}
随机次数重复字符串拼接
operator fun String.times(n: Int) = repeat(n)
fun main() {
println("Coco " * (1..20).random())
}