当前位置: 首页 > news >正文

Kotlin-运算符重载函数

在 Kotlin 里,运算符重载函数允许为自定义类型重新定义现有的运算符(如 + -…)行为,从而让自定义类型能像内置类型那样使用运算符

文章目录

  • 基本语法
  • 作用场景
    • 类对象
    • 数据类型
    • 接口
  • 注意事项

基本语法

若要重载运算符,需要定义一个带有 operator 修饰符的函数。函数名必须是 Kotlin 预定义的运算符对应的函数名。基本语法如下:

class YourClass {operator fun XXX(parameters): ReturnType {// 函数体}
}

作用场景

类对象

比如为我们的自定义类型添加加法运算

如下图所示:
+对应的函数名是plus,
+=对应的函数名是 plusAssign

在这里插入图片描述

class Student(val name: String, val age: Int) {//注意,二元运算符必须带一个形参,表示右侧的操作数operator fun plus(another: Student): Student {return Student(this.name + another.name, this.age+another.age)}
}fun main() {val stu1 = Student("海贼王 ", 2)val stu2 = Student("我当定了", 4)val result = stu1 + stu2println("(${result.name}, ${result.age})")
}

在这里插入图片描述
在这个例子中,Student类重载了 + 运算符,实现了两个 Student对象的相加。stu1 + stu2相当于stu1.plus(stu2)

接下来举一个重载一元运算符的例子,比如取反运算符:

class Student(val name: String, val age: Int) {operator fun not(): Student {return Student(name.reversed(), age)}
}fun main() {val stu1 = Student("海贼王", 2)val stu2 = !stu1println("(${stu2.name}, ${stu2.age})")
}

在这里插入图片描述
!stu1相当于stu1.not()

数据类型

尽管基本数据类型(如 Int、Double 等)的内置运算符已有默认行为,但可以为它们的扩展类型定义新的运算符行为。

// 为 Int 类型的扩展类重载 * 运算符
class Multiplier(val value: Int) {operator fun times(other: Int): Int {return this.value * other}
}fun main() {val multiplier = Multiplier(5)val result = multiplier * 3println(result)
}

在上述代码中,为 Multiplier 类重载了 * 运算符,让 Multiplier 对象可以和 Int 类型的数据进行乘法运算。

接口

如果一个类实现了特定的接口,并且接口中定义了运算符重载函数,那么该类对象也能使用这些重载的运算符。

interface Addable<T> {operator fun plus(other: T): T
}class ComplexNumber(val real: Double, val imaginary: Double) : Addable<ComplexNumber> {override operator fun plus(other: ComplexNumber): ComplexNumber {return ComplexNumber(this.real + other.real, this.imaginary + other.imaginary)}
}fun main() {val c1 = ComplexNumber(1.0, 2.0)val c2 = ComplexNumber(3.0, 4.0)val result = c1 + c2println("(${result.real}, ${result.imaginary})")
}

在这个例子中,ComplexNumber 类实现了 Addable 接口,并重载了 + 运算符,使得 ComplexNumber 对象可以使用 + 进行相加操作。

注意事项

  1. 运算符选择:只能重载 Kotlin 预定义的运算符,不能创建新的运算符。
  2. 函数签名:运算符重载函数的参数和返回值类型需要根据具体的运算符和业务需求来确定。
  3. 遵循约定:重载运算符时,应尽量遵循该运算符在数学或逻辑上的常规语义,避免造成混淆。

相关文章:

  • SAE极速部署弹性微服务商城——实验记录
  • Cookie 是什么?
  • Python 与 MongoDB 深度融合:全流程数据库操作指南
  • 力扣——23合并升序链表
  • 使用listPersonalCertificates 命令列示WebSphere Application Server特定密钥库中的个人证书
  • 【Machine Learning Q and AI 读书笔记】- 03 小样本学习
  • “Everything“工具 是 Windows 上文件名搜索引擎神奇
  • xml 和 yaml 的区别
  • 关系型数据库设计指南
  • HOOK上瘾思维模型——AI与思维模型【88】
  • 【Linux系统】Linux进程信号(产生,保存信号)
  • 使用 Spring Boot Actuator 实现应用实时监控
  • 《TCP/IP详解 卷1:协议》之第九章:IP选路
  • 项目管理进阶:详解华为研发项目管理(IPD流程管理)【附全文阅读】
  • 机器视觉开发-打开摄像头
  • Selenium:模拟真实用户的爬虫
  • Python与深度学习:自动驾驶中的物体检测,如何让汽车“看懂”世界
  • 前端函数防抖(Debounce)完整讲解 - 从原理、应用到完整实现
  • Arduino程序函数详解与实际案例
  • Qt二维码demo
  • 2024年境内酒店住宿行业指标同比下滑:酒店行业传统增长模式面临挑战
  • 阿曼外交部:美伊谈判因故推迟
  • 证监会副主席王建军被查
  • 三大猪企一季度同比均实现扭亏为盈,营收同比均实现增长
  • 招商蛇口:一季度营收约204亿元,净利润约4.45亿元
  • 匈牙利国会通过退出国际刑事法院的决定