Kotlin学习 - 运算符重载

news/2025/1/12 8:45:29/

在Java中,运算符基本是用于数字的计算:+ - * / % ++ –。在Kotlin中通过对运算符进行重载,允许任意两个对象进行相加,或者是进行更多其他的运算操作。

1、语法结构

class Obj {operator fun plus(obj: Obj): Obj { // 处理相加的逻辑} 
}val obj1 = Obj()
val obj2 = Obj() 
val obj3 = obj1 + obj2

2、实例,实现一个Money类,重载plus方法:

class Money(val value: Int) {var sum: Int = 0operator fun plus(money: Money): Money {sum = value + money.valuereturn Money(sum)}
}

调用实现:

fun main() {val money1 = Money(5)val money2 = Money(6)val money3 = money1 + money2;println(money3.value)
}//结果
11

上面例子就使用运算符重载实现了让两个Money对象相加的功能。Kotlin的语法糖,看下反编译后的Java代码:

Money money1 = new Money(5);
Money money2 = new Money(6);
Money money3 = money1.plus(money2);

看上面Java代码可以看到,运算符在编译时会替换成方法的调用,+替换成plus方法,Kotlin的每个运算符都有其对应的方法,其他同理也可以这样重载使用。

3、当然对象还可以和数字相加,在上面基础上我们在加一个重载方法

class Money(val value: Int) {var sum: Int = 0operator fun plus(money: Money): Money {sum = value + money.valuereturn Money(sum)}operator fun plus(newValue: Int): Money {sum = value + newValuereturn Money(sum)}
}

测试代码

fun main() {val money1 = Money(5)val money2 = Money(6)val money3 = money1 + money2;val money4 = money1 + 20;println(money3.value)println(money4.value)
}//结果
11
25

反编译后的Java代码:

Money money1 = new Money(5);
Money money2 = new Money(6);
Money money3 = money1.plus(money2);
Money money4 = money1.plus(20);

http://www.ppmy.cn/news/616670.html

相关文章

暴风影音常用快捷键

视频播放倍数增大:ctrl⬆️ 视频播放倍数减小:ctrl⬇️ 视频九十度旋转:[ 视频垂直旋转:]

暴风影音5完整版(集成Real解码器) 增强去广告版

暴风影音5完整版(集成Real解码器) 增强去广告版 软件分类:媒体播放 运行环境:WinXP/2003/win7/ 软件语言:简体中文 授权方式:免费版 软件大小:31539KB 更新时间:2011-8-29 软件简介: 暴风影音5是暴风影音公司全新推出的暴风影音5.0版本,目前暴风影音5还是beta版&am…

(Windows7旗舰版) 大地Ghost Win7 贺岁纯净版2011

软件名称:大地 Ghost Win7 贺岁纯净版X86 2011 系统格式:NTFS 32位 软件语言:简体中文 适用环境:全新系统(双系统请参照说明) 发布时间:2011年01月 ◇前言◇ 此版本沿用了大地 GHOST 特点,稳定&#xf…

linux下暴风影音安装方法

Linux下Mplayer安装记录 安装MPlayer经验: 1 .去官网下载三个文件,分别是:主程序+解码器+皮肤 http://www.mplayerhq.hu http://www.mplayerhq.hu/design7/dload.html 2.检查Linux系统中是否已经安装了以下四个包&…

10-Vue从入门到手撕

什么时候可以开始学习Vue? 学习路线:H5 CSS3 ---> ES6 ---> 网络 ---> 第三方库 ---> 工程化 ---> Vue 不经过前面的铺垫是无法学习vue的,就算学了还得倒回去补知识点 展现Vue Vue源码分析,走进作者的内心世界 …

signature=928c561b85c7b57c8e64bdeb4a18b1f1,专注于Win7系列作品汇总(月版)

21.4 更新时间:2021年04月 了解与下载> 文件: Win7_x64_21.4.GHO 大小: 6.00GB (6450333190 字节) MD5: 1BA5868381592FAEE0E284E9C7470FD0 SHA1: 80296522FBC3EDEA62D72BC9B28CE183BB3F705F 文件: Win7_x64_21.4d.WIM 大小: 4.92GB (5293841478 字节) MD5: 1822C75C5…

暴风影音解码器问题: E436EB83-524F-11CE-9F53-0020AF0BA770

暴风影音解码器问题: E436EB83-524F-11CE-9F53-0020AF0BA770 用暴风影音播放播放某些rm文件时出现下面的错误提示: 媒体流媒体流 0 媒体类型 0:--------------------------AM_MEDIA_TYPE:majortype: MEDIATYPE_Stream {E436EB83-524F-11CE-9F53-0020AF0BA770}su…

画廊一定要会的管理技巧!小白一学就会

画廊是艺术品展示和交流的重要场所,为了保护和展示珍贵的艺术品,动环监控显得尤为重要。 通过对画廊环境的实时监测和管理,可以确保艺术品的安全、展示效果的优化以及观众的舒适体验。 客户案例 上海市某艺术馆 上海市某艺术馆引入物联网云…