Android开发(Kotlin) 扩展函数和运算符重载的使用
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>扩展函数</li><li>运行算符重载</li><li>扩展函数及运算符重载的联合使用</li></ul></div><p class="maodian"></p><h2>扩展函数</h2><p>扩展函数表示即使在不修改某个类的源码的情况下,仍然可以打开这个类,向该类添加新的函数。<br />语法格式</p>
<div class="jb51code"><pre class="brush:java;">fun ClassName.methodName(param1:Int,param2:Int):Int{
}</pre></div>
<p>向String类中添加一个扩展函数,创建.kt文件,文件名没有特殊要求。定义成顶层方法。</p>
<div class="jb51code"><pre class="brush:java;">fun String.lettersCount(): Int {
var count = 0
for (char in this) {
if (char.isLetter()) {
count++
}
}
return count
}</pre></div>
<p>lettersCount()方法定义成了String类的扩展函数,函数就有了String实例的上下文,因此lettersCount()函数就不再需要接收一个参数了,直接遍历this。<br />使用扩展函数</p>
<div class="jb51code"><pre class="brush:java;"> "ASDGHJH1564564&*^&*%&^".lettersCount()</pre></div>
<p class="maodian"></p><h2>运行算符重载</h2>
<p>运算符重载使用的是operator关键字。在指定函数前面加上operator。不同的运算符对应的重载函数不同。丽例如,加号运算符对应的是plus()函数,减号运算符对应的是minus()函数。<br />以加号运算符为例的语法结构</p>
<div class="jb51code"><pre class="brush:java;">class obj{
operator fun plus(obj:Obj):Obj{
}
}</pre></div>
<p>关键字operator 和plus是固定的。</p>
<p>让两个PowerConsumption对象相加。定义PowerConsumption类的结构,value代表用电量</p>
<div class="jb51code"><pre class="brush:java;">class PowerConsumption(val value: Int) {
}</pre></div>
<p>编写运算符重载</p>
<div class="jb51code"><pre class="brush:java;">class PowerConsumption(val value: Int) {
operator fun plus(powerConsumption: PowerConsumption): PowerConsumption {
val sum = value + powerConsumption.value
return PowerConsumption(sum)
}
}</pre></div>
<p>使用运算符</p>
<div class="jb51code"><pre class="brush:java;"> val powerConsumption1 = PowerConsumption(50)
val powerConsumption2 = PowerConsumption(100)
val powerConsumption3 = powerConsumption1 + powerConsumption2
println(powerConsumption3.value)</pre></div>
<p>运算符重载有好多,对参考对照表使用</p>
<table><thead><tr><th>语法糖表达式</th><th>实际调用函数</th></tr></thead><tbody><tr><td>a+b</td><td>a.plus(b)</td></tr><tr><td>a-b</td><td>a.minus(b)</td></tr><tr><td>a*b</td><td>a.times(b)</td></tr><tr><td>a/b</td><td>a.div(b)</td></tr><tr><td>a%b</td><td>a.rem(b)</td></tr><tr><td>a++</td><td>a.inc()</td></tr><tr><td>a–</td><td>a.dec(b)</td></tr><tr><td>+a</td><td>a.unaryPlus()</td></tr><tr><td>-a</td><td>a.unaryMinus()</td></tr><tr><td>!a</td><td>a.not()</td></tr><tr><td>a ==b</td><td>a.equals(b)</td></tr><tr><td>a > b a<b a>=b a<=b</td><td>a.compareTo(b)</td></tr><tr><td>a…b</td><td>a.rangeTo(b)</td></tr><tr><td>a</td><td>a.get(b)</td></tr><tr><td>a = c</td><td>a.set(b,c)</td></tr><tr><td>a in b</td><td>a.contains(b,c)</td></tr></tbody></table>
<p class="maodian"></p><h2>扩展函数及运算符重载的联合使用</h2>
<p>下面是一个随机生成字符串长度的函数。</p>
<div class="jb51code"><pre class="brush:java;"> fun getRandomLengthString(str: String):String{
val n = (1..20).random()
val builder = StringBuilder()
repeat(n){
builder.append(str)
}
returnbuilder.toString()
}</pre></div>
<p>上面的代码功能是将传入str重复n次。是否能够使用str*n这种写法表示让str字符串重复n次,kotlin可以实现。<br />要让一个字符串乘以一个数字,肯定要在String类中重载乘号运算符,但string类是系统提供的类,就只能使用扩展函数了。</p>
<div class="jb51code"><pre class="brush:java;">operator fun String.times(n: Int): String {
val builder = StringBuilder()
repeat(n) {
builder.append(this)
}
return builder.toString()
}</pre></div>
<p>使用String.times</p>
<div class="jb51code"><pre class="brush:java;"> val str = "mnl"*3
println(str)</pre></div>
<div class="jb51code"><pre class="brush:plain;">mnlmnlmnl</pre></div>
<p>到此这篇关于Android开发(Kotlin) 扩展函数和运算符重载的文章就介绍到这了,更多相关Android扩展函数和运算符重载内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>Android Kotlin 高阶函数详解及其在协程中的应用小结</li><li>Kotlin-Android之Activity使用详解</li><li>android 使用kotlin 实现点击更换全局语言(中日英切换)</li><li>Android动画入门教程之kotlin</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]