php盗版视频网站怎么做的,网站解决访问量超载,做三年网站需要多少钱,马鞍山网站建设 明达目录
扩展函数
语法结构
代码示例
运算符重载
语法结构
一元操作符
二元操作符
数值类型操作符
等于和不等于操作符
比较操作符
调用操作符 扩展函数
语法结构
对于扩张函数的语法结构其实很简单#xff0c;你想在那个类中添加扩张函数#xff0c;那么你就用该类…目录
扩展函数
语法结构
代码示例
运算符重载
语法结构
一元操作符
二元操作符
数值类型操作符
等于和不等于操作符
比较操作符
调用操作符 扩展函数
语法结构
对于扩张函数的语法结构其实很简单你想在那个类中添加扩张函数那么你就用该类的类名加上点就可以一般语法结构如下
fun ClassName.methodName(): Int {return 0
}
代码示例
fun String.lettersCount(): Int {var count 0for (letterChar in this) {if (letterChar.isLetter()) count}return count
}我们只需要创建一个为String.kt的文件对于文件名我们可以随便命名但是最好还是创建哪个类的扩展函数就以哪个类为文件名这样便于查找也方便后续的合作开发。
我们将lettersCount()方法定义成了String类的扩展函数那么函数中就自动拥有了String实例的上下文。因此lettersCount()函数就不再需要接收一个字符串参数了而是直接遍历this即可因为现在this就代表着字符串本身。
定义好了扩展函数之后统计某个字符串中的字母数量只需要这样写即可 val count dshdhakjdas2u121jksd23424h.lettersCount()println(含有$count 个字母)
除了String类之外你还可以向任何类中添加扩展函数Kotlin对此基本没有限制。
运算符重载
语法结构
class Obj{operator fun plus(obj: Obj) : Obj{//处理逻辑}
}
运算符重载使用的是operator关键字只要在指定函数的前面加上operator关键字就可以实现运算符重载的功能了。
在上述语法结构中关键字operator和函数名plus都是固定不变的而接收的参数和函数返回值可以根据你的逻辑自行设定。那么上述代码就表示一个Obj对象可以与另一个Obj对象相加最终返回一个新的Obj对象。对应的调用方式如下
val obj1 Obj()
val obj2 Obj()
val obj3 obj1 obj2
这种obj1 obj2的语法看上去好像很神奇但其实这就是Kotlin给我们提供的一种语法糖它会在编译的时候被转换成obj1.plus(obj2)的调用方式。
了解了运算符重载的基本语法之后下面我们开始实现一个更加有意义功能让两个Money对象相加。
首先定义Money类的结构这里我准备让Money的主构造函数接收一个value参数用于表示钱的金额。创建Money.kt文件然后定义plus运算符重载代码如下所示
class Money(val value: Int) {operator fun plus(money: Money): Money {val sum money.value valuereturn Money(sum)}
}
可以看到这里使用了operator关键字来修饰plus()函数这是必不可少的。在plus()函数中我们将当前Money对象的value和参数传入的Money对象的value相加然后将得到的和传给一个新的Money对象并将该对象返回。这样两个Money对象就可以相加了就是这么简单。除了plus()函数Kotlin还提供了很多如下
一元操作符
操作符方法名aa.unaryPlus()-aa.unaryMinus()!aa.not()aa.inc()
二元操作符
操作符方法名a ba.plus(b)a – ba.minus(b)a * ba.times(b)a / ba.div(b)a % ba.mod(b)a..ba.rangeTo(b)a in bb.contains(a)a !in b!b.contains(a)a ba.plusAssign(b)a - ba.minusAssign(b)a * ba.timesAssign(b)a / ba.divAssign(b)a % ba.modAssign(b)
数值类型操作符
操作符方法名a[i]a.get(i)a[i, j]a.get(i, j)a[i_1, …, i_n]a.get(i_1, …, i_n)a[i] ba.set(i, b)a[i, j] ba.set(i, j, b)a[i_1, …, i_n] ba.set(i_1, …, i_n, b)
等于和不等于操作符
操作符方法名a ba?.equals(b) ?: (b null)a ! b!(a?.equals(b) ?: (b null))
比较操作符
操作符方法名a ba.compareTo(b) 0a ba.compareTo(b) 0a ba.compareTo(b) 0a ba.compareTo(b) 0
调用操作符
操作符方法名a()a.invoke()a(i)a.invoke(i)a(i, j)a.invoke(i, j)a(i_1, …, i_n)a.invoke(i_1, …, i_n)