• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Kotlin操作符重载:把标准操作加入到任何类中(KAD 17),kotlinkad

Kotlin操作符重载:把标准操作加入到任何类中(KAD 17),kotlinkad

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了操作符重载,c#操作符重载,重载赋值操作符,java 操作符重载,操作符可以重载为类的等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Kotlin操作符重载:把标准操作加入到任何类中(KAD 17),kotlinkad


作者:Antonio Leiva

时间:Mar 21, 2017

原文链接:https://antonioleiva.com/operator-overload-kotlin/

 

就像其他每种语言一样,在Kotlin中,已经预定义了一些操作符执行一定的操作。

 

最典型的是加(+),减(-),乘(*),除(/),而且还有很多。

 

类似Java这样的一些语言,这些操作符被限制在一些特定的数量类型上,且没有方法让其他类型数据使用这些操作符。

 

还有在像Scala这样的其他语言中,由于函数名称可接受任何符号,我们就可创造能用于任何数据类型操作符。

 

Kotlin的这种方案:有一些预定义的操作符,而我们能够为任意数据类型重载它们。

 

Kotlin的操作符重载

 

如我们讨论的,Kotlin能够重载一些操作符,在我们的类中实现其相应的函数。这些函数前必须加上保留字operator。

 

这些基本操作符如下:

 

一元操作符

 

+a

a.unaryPlus()

-a

a.unaryMinus()

!a

a.not()

a++

a.inc()

a–

a.dec()

 

二元操作符

 

a + b

a.plus(b)

a – b

a.minus(b)

a * b

a.times(b)

a / b

a.div(b)

a % b

a.mod(b)

a..b

a.rangeTo(b)

a in b

b.contains(a)

a !in b

!b.contains(a)

a += b

a.plusAssign(b)

a -= b

a.minusAssign(b)

a *= b

a.timesAssign(b)

a /= b

a.divAssign(b)

a %= b

a.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] = 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)

 

等式(equals)操作符

 

a == b

a?.equals(b) ?: b === null

a != b

!(a?.equals(b) ?: b === null)

 

 

由于equals操作使用更复杂地转换做正确性检查,并且期望函数准确说明而不仅仅是为它的一个特殊名称,而稍有一点不同略有不同。

1 fun equals(other: Any?): Boolean

 

激活(invoking)函数

 

a(i)

a.invoke(i)

a(i, j)

a.invoke(i, j)

a(i_1, …, i_n)

a.invoke(i_1, …, i_n)

 

例子

 

假设你有公司数据模型,每位雇员的列表。

 

 

你可以使用get操作符访问方括号中位置。这种实现非常容易:

1 class Employee(val id: Long, val name: String)
2  
3 class Company(private val employees: List) {
4     operator fun get(pos: Int) = employees[pos]
5 }

 

 

这样你就可以使用它:

1 val company = Company(listOf(Employee(1235, "John"), Employee(2584, "Mike")))
2 val mike = company[1]

 

 

而你也是能够超于它,并用ID来恢复值,实现这样的功能:

1 operator fun get(id: Long) = employees.first { it.id == id }
2  
3 val mike = company[2584]

 

结论

 

操作符能够帮助我们为使用通用符号表达已知操作提升可读性。

 

 

小心不要在会导致读者混淆的情况下使用它们,它们能够成为一个非常有趣的工具

 

 

如果您还不知道怎样做,我建议你获取免费指南,学习怎样创建您的第一个项目,或是直接获取这本书,学习怎样从零开始创建一个完整的应用程序。

 

 

 

a.unaryMinus()

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Kotlin操作符重载:把标准操作加入到任何类中(KAD 17),kotlinkad

相关文章

  • 2017-05-26WebView上实现Java与JavaScript交互,webviewjavascript
  • 2017-05-26实现Discuz论坛客户端应用源码,discuz源码
  • 2017-05-26安卓界面高级组件------拖动条和评星条,安卓------拖动
  • 2017-05-26Android自定义控件系列案例【四】
  • 2017-05-26管理音频播放(摘自Android官方培训课程中文版(v0.9.5))
  • 2017-07-22Android性能优化
  • 2017-05-26Android动态加载Dex机制解析
  • 2017-05-26redis一例连接池连接不上的故障及解决
  • 2017-05-26React-Native系列Android——Touch事件原理及状态效果
  • 2017-05-26Atitit.android播放smb 网络邻居视频文件解决方案,atitit.androidsmb

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android中Activity的四大启动模式实验简述,androidactivity
    • [转载] 从Handler.post(Runnable r) ,Handler.sendEmptyMessage()梳理Android的消息机制(以及handler的内存泄露),
    • 独立开发者的个人经验之谈,独立开发者的
    • Android与H5互调(通过实例来了解Hybrid App),androidhybrid
    • 自定义的dialog中的EditText无法弹出输入法解决方案,dialogedittext
    • 提升Android ListView性能的几个技巧
    • moveTaskToback退后台的用法及作用,movetasktoback后台
    • ORA-16038/ORA-00742: Log read detects lost write in thread
    • 硅谷商城第二版6--购物车模块,6--购物车
    • android:exported 属性分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有