Android开发中Kotlin扩展函数与运算符重载实战指南
时间:2026-08-17 | 作者:星河游者 | 阅读:0扩展函数
先来看扩展函数。
有时候,我们希望给某个类添加一个新方法,但又不方便直接修改它的源码。比如,这个类是系统自带的,或者我们拿不到它的修改权限。
这时,Kotlin 给出的答案就是扩展函数。 它可以在不改动类本身的前提下,给它“续”一个方法。
语法格式
语法格式很直观:
fun ClassName.methodName(param1:Int,param2:Int):Int{
}
示例:给 String 添加统计字母个数的方法
举个例子,我们想给 String 类加一个统计字母个数的功能。
创建一个 .kt 文件,文件名随意。然后把它定义成顶层方法:
fun String.lettersCount(): Int {
var count = 0
for (char in this) {
if (char.isLetter()) {
count++
}
}
return count
}
这里,lettersCount() 被声明成 String 类的扩展函数。
因此,在函数体内可以直接使用 this 来引用调用它的字符串实例,不再需要额外传参。
用起来也很简单:
"ASDGHJH1564564&*^&*%&^".lettersCount()
运行算符重载
运算符重载也是 Kotlin 的一个实用特性。
它的核心是 operator 关键字。在对应函数前加上它,就能让自定义类型支持加减乘除等操作。
每种运算符都对应一个固定名称的函数。比如,加号对应 plus(),减号对应 minus()。
基本语法
语法结构大致是这样:
class obj{
operator fun plus(obj:Obj):Obj{
}
}
关键字 operator 和函数名 plus 都是固定的,不能乱改。
示例:让两个用电量对象直接相加
假设我们有一个表示用电量的类 PowerConsumption。
里面只有一个 value 属性,用来记录度数。
现在想让两个用电量对象能直接相加:
class PowerConsumption(val value: Int) {
}
重载加号运算符后,代码就变成了:
class PowerConsumption(val value: Int) {
operator fun plus(powerConsumption: PowerConsumption): PowerConsumption {
val sum = value + powerConsumption.value
return PowerConsumption(sum)
}
}
之后就能直接用 + 把两个用电量加起来:
val powerConsumption1 = PowerConsumption(50)
val powerConsumption2 = PowerConsumption(100)
val powerConsumption3 = powerConsumption1 + powerConsumption2
println(powerConsumption3.value)
常见运算符对应关系
其他运算符也类似。下面这张对照表可以帮你快速找到对应的函数:
| 语法糖表达式 | 实际调用函数 |
|---|---|
| a+b | a.plus(b) |
| a-b | a.minus(b) |
| a*b | a.times(b) |
| a/b | a.div(b) |
| a%b | a.rem(b) |
| a++ | a.inc() |
| a-- | a.dec(b) |
| +a | a.unaryPlus() |
| -a | a.unaryMinus() |
| !a | a.not() |
| a ==b | a.equals(b) |
| a > b a=b a<=b | a.compareTo(b) |
| a…b | a.rangeTo(b) |
| a[b] | a.get(b) |
| a[b] = c | a.set(b,c) |
| a in b | a.contains(b,c) |
扩展函数及运算符重载的联合使用
光说不练假把式。
下面来看看,两者结合后能做出什么有意思的事。
原始函数写法
比如,有一个函数,用来生成随机长度的重复字符串:
fun getRandomLengthString(str: String):String{
val n = (1..20).random()
val builder = StringBuilder()
repeat(n){
builder.append(str)
}
return builder.toString()
}
这个函数的功能,是把传入的字符串重复 n 次。
目标:实现 str * 3 这样的写法
但你有没有想过,能不能直接用 str * 3 这样的写法,来表示“字符串重复 3 次”?
在 Kotlin 里完全可以实现。只需要给 String 类重载乘号运算符。
但 String 是系统类,改不了源码,怎么办?没错,用扩展函数来扩展它:
operator fun String.times(n: Int): String {
val builder = StringBuilder()
repeat(n) {
builder.append(this)
}
return builder.toString()
}
调用效果
现在写起来就清爽多了:
val str = "mnl"*3
println(str)
输出:
mnlmnlmnl
扩展函数和运算符重载结合使用,可以明显提升代码的可读性和灵活性。
尤其是当你需要给第三方类或系统类“开挂”时,这套组合拳非常管用。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 不卖课纯干货:详解Android分层架构与面试策略
- 时间:2026-08-27
-
- Jetpack 和 AndroidX 到底是什么关系?一篇讲清概念、区别与实际用法
- 时间:2026-08-25
-
- Android Spinner实战:用法、案例与常见问题解答
- 时间:2026-08-24
-
- Android 多层嵌套 RecyclerView 滚动详解:从 Fling 中断到丝滑联动
- 时间:2026-08-24
-
- Android Activity启动模式详解与应用场景解析
- 时间:2026-08-23
-
- Android 自定义 View 实战:打造一个跟随滑动的丝滑指示器
- 时间:2026-08-22
-
- 谷歌Android推虚假来电检测功能 基于RCS防范AI伪造诈骗
- 时间:2026-08-21
-
- Android工程师快速入门Dart开发实战攻略
- 时间:2026-08-21
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
