Kotlin 学习 拓展函数和运算符重载

摘自第一行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())
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值