Android开发(Kotlin) 扩展函数和运算符重载的使用
扩展函数
扩展函数表示即使在不修改某个类的源码的情况下,仍然可以打开这个类,向该类添加新的函数。
语法格式
fun ClassName.methodName(param1:Int,param2:Int):Int{
}向String类中添加一个扩展函数,创建.kt文件,文件名没有特殊要求。定义成顶层方法。
fun String.lettersCount(): Int {
var count = 0
for (char in this) {
if (char.isLetter()) {
count++
}
}
return count
}lettersCount()方法定义成了String类的扩展函数,函数就有了String实例的上下文,因此lettersCount()函数就不再需要接收一个参数了,直接遍历this。
使用扩展函数
"ASDGHJH1564564&*^&*%&^".lettersCount()
运行算符重载
运算符重载使用的是operator关键字。在指定函数前面加上operator。不同的运算符对应的重载函数不同。丽例如,加号运算符对应的是plus()函数,减号运算符对应的是minus()函数。
以加号运算符为例的语法结构
class obj{
operator fun plus(obj:Obj):Obj{
}
}关键字operator 和plus是固定的。
让两个PowerConsumption对象相加。定义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<=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()
}上面的代码功能是将传入str重复n次。是否能够使用str*n这种写法表示让str字符串重复n次,kotlin可以实现。
要让一个字符串乘以一个数字,肯定要在String类中重载乘号运算符,但string类是系统提供的类,就只能使用扩展函数了。
operator fun String.times(n: Int): String {
val builder = StringBuilder()
repeat(n) {
builder.append(this)
}
return builder.toString()
}使用String.times
val str = "mnl"*3
println(str)mnlmnlmnl
到此这篇关于Android开发(Kotlin) 扩展函数和运算符重载的文章就介绍到这了,更多相关Android扩展函数和运算符重载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
android 中ProgressDialog实现全屏效果的示例
本篇文章主要介绍了android 中ProgressDialog实现全屏效果的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-11-11
Android自定义电池组件实例代码(BatteryView)
在许多应用中,显示设备的电池电量是一个常见的需求,下面这篇文章主要介绍了Android自定义电池组件(BatteryView)的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下2025-09-09
Android studio实现PopupWindow弹出框效果
这篇文章主要为大家详细介绍了Android studio实现PopupWindow弹出框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-10-10
利用libmp3lame实现在Android上录音MP3文件示例
本篇文章主要介绍了利用Lame库实现在Android上录音MP3文件示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2017-03-03
深入了解Android中GestureDetector的定义与使用
Android中的GestureDetector 可以使用 MotionEvents 检测各种手势和事件,非常的好用。本文将会通过几个具体的例子来讲解一下GestureDetector的具体使用方法,需要的可以参考一下2023-01-01


最新评论