首页 > 其他分享 >Kotlin学习快速入门(10)—— 重载运算符使用

Kotlin学习快速入门(10)—— 重载运算符使用

时间:2022-08-15 12:14:18浏览次数:83  
标签:10 val Kotlin list 运算符 重载 Teacher

原文:Kotlin学习快速入门(10)—— 重载运算符使用 - Stars-One的杂货小窝

Kotlin中提供了基础的运算符,但是只是针对基础的数据类型,如Int,Double等

如果我们想让两个对象可以相加的功能,这个时候可以使用重载运算符的功能来实现

介绍

首先,先介绍下什么是运算符,如以下代码:

val a = 2
val b = 3
val result =a + b

这里的+就是运算符,实际上这里的a+b等同a.plus(b)

这里相当于语法糖的意思,实际上+是调用的plus()方法

重载运算符的关键字为operator,具体可重载的运算符如下表所示:

|表达式 |实际调用方法 |
|a * b|a.times(b) |
|a / b|a.div(b) |
|a % b|a.mod(b) |
|a + b|a.plus(b) |
|a - b|a.minus(b) |
|a += b|a.plusAssign(b) |
|a -= b|a.minusAssign(b) |
|a *= b|a.timesAssign(b) |
|a /= b|a.divAssign(b) |
|a %= b|a.remAssign(b) |
|a == b|a.equals(b)
|a != b |!a.equals(b) |
|a in b |b.contains(a) |
|a !in b |!b.contains(a) |
|a > b |a.compareTo(b) > 0 |
|a < b |a.compareTo(b) < 0 |
|a >= b |a.compareTo(b) >= 0 |
|a <= b |a.compareTo(b) <= 0 |
|+a |a.unaryPlus() |
|-a |a.unaryMinus() |
|!a |a.not() |
|++a,a++ |a.inc() |
|--a, a-- |a.dec() |
|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] = b | a.set(i, b) |
|a[i, j] = b | a.set(i, j, b) |
|a[i_1, ..., i_n] = b | a.set(i_1, ..., i_n, b) |

可能罗列的不全,具体参考运算符重载 | Kotlin

下面我们以*为例,重载运算符来实现一个逻辑

在类中重载运算符

我们有个这样的代码

fun main() {
    val list = arrayListOf<Teacher>()
    repeat(3) {
        val student =Teacher("test")
        list.add(student)
    }

}

class Teacher(name:String)

上面的代码是循环3次,并创建了Teacher对象,并添加到List中,实际上我们可以重载运算符,对Teacher类改造一下:

class Teacher(name: String) {
    operator fun times(n: Int): List<Teacher> {
        val list = arrayListOf<Teacher>()
        repeat(n){
            val temp = copyBean(this)
            list.add(temp)
        }
        return list
    }
}

然后使用就变为下面:

fun main() {
    val student = Teacher("test")
    //相当于此代码
    //val list= student.times(3)
    val list = student * 3
}

注意:

实际上,重载运算符相当于重载运算符对应的方法而已

方法的参数类型和返回类型,根据需要定义即可,不一定需要那么死板

使用扩展来重载运算符

上面提高的示例就是在类中进行重载,我们也可以通过扩展来实现给某个类的运算符进行重载

我们还是以上面的Teacher为例

class Teacher(name: String) 

//扩展给Teacher加上重载运算符
operator fun Teacher.times(n: Int): List<Teacher> {
    val list = arrayListOf<Teacher>()
    repeat(n) {
        val temp = copyBean(this)
        list.add(temp)
    }
    return list
}

参考

标签:10,val,Kotlin,list,运算符,重载,Teacher
From: https://www.cnblogs.com/stars-one/p/16586750.html

相关文章

  • win10安装jdk1.8
    1.下载jdk1.8下载地址:JavaSEDevelopmentKit8Downloads我选择的是JavaSEDevelopmentKit8u202,首先需要接受协议,然后点击jdk-8u202-windows-x64.exe进行下载。......
  • navicat连接数据库出现1045错误
      提示密码错误。解决方法:1.以管理员权限进入命令行2.进入MySQL的bin目录下cd D:\Mysql\mysql-5.7.9-winx64\bin 3.关闭mysqld的进程先输入tasklist|finds......
  • 1078 字符串压缩与解压——20分
    文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如ccccc就用5c来表示。如果字符没......
  • 1076 Wifi密码——15分
    下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用wifi,又怕耽误亲们的学习,现将wifi密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。......
  • 1075 链表元素分类——25分
    给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0,K]区间内的元素都排在大于K的元素前面。但每一类内部元素的顺序是不能改变......
  • Gym102798 CCPC2020威海E加强版 题解
    原题link把\(m\)和\(a_i\)的上界改成\(200\),其他不变.基本思路:枚举\(S\),求出\(p(S)\)表示集合\(S\)中的怪兽被打死的概率,答案就是\(\sum_{S}|S|p(S)\).而这......
  • check password policy on win 10查看密码策略
    HowToConfigureaDomainPasswordPolicyWhatisTheDefaultDomainPasswordPolicy?Bydefault,ActiveDirectoryisconfiguredwithadefaultdomainpassword......
  • 1071 小赌怡情——15分
    常言道“小赌怡情”。这是一个很简单的小游戏:首先由计算机给出第一个整数;然后玩家下注赌第二个整数将会比第一个数大还是小;玩家下注t个筹码后,计算机给出第二个数。若玩家猜......
  • 101本书,一次拿1到4本,拿到最后一本书的人赢,甲乙两人拿书,甲怎么保证必胜
    创建一维数组以甲为主当乙拿完书之后剩余书有1本2本3本4本的时候甲必胜建立数组分析有5本书的时候无论怎么拿都会把1到4留给对方,所以拿完对方是必胜局,所以5......
  • 文件中有多个商品id,会重复,取出现最多的10个
    多线程读取文件,map或list存储出现次数,并创建对象封装,最小根堆找出前10个商品publicclassDemo{privatestaticfinalStringregex=",";publicstaticv......