一元操作符

表达式 对应的函数
+a a.unaryPlus()
-a a.unaryMinus()
!a a.not()
a++ a.inc()
a-- a.dec()
fun main(arg: Array<String>) {
var a = "a"
println(a++)
println(a)
println(++a)
}
operator fun String.inc():String{//重载String的++
return this +this
}

二元操作符

表达式 对应的函数
a+b a.plus(b)
a-b a.minus(b)
a*b a.tims(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)
fun main(arg: Array<String>) {
var s= "hello"
print(s*10) }
//重载乘法操作符
operator fun String.times(other:Any?):String{
var result = ""
if (other!= null){
if (other is Int)
for (i in 1..other){
result+=this
}
}
return result
}

方括号操作符重载

表达式 对应的函数
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..b a.rangeTo(b)
a[i_1,...,i_n]=b a.set(i_1,..i_n,b)
fun main(arg: Array<String>) {
val arr1 :Array<Any> = arrayOf("3", "2")
val arr2 :Array<Any> = arrayOf("9", "8") println("arr1[1] = ${arr1[1]}")
println("arr2[1] = ${arr2[1]}") val arr3 = arrayOf(arr1, arr2)
println("arr3[0][0] = ${arr3[0][0]}") }
//重载一维数组[i]操作符
operator fun Array<Any>.get(i:Int):Int{
if (this[i] is Int){
return this[i] as Int
}else if (this[i] is String){
try {
return this[i].toString().toInt()
}catch (e:Exception){ }
}
return 0
}
//重载二维数组[i][j]操作符
operator fun Array<Array<Any>>.get(i:Int,j:Int):Int{
if (this[i][j] is Int){
return this[i][j] as Int
}else if (this[i][j] is String){
try {
return this[i][j].toString().toInt()
}catch (e:Exception){ }
}
return 0
}

赋值操作符重载

表达式  对应的函数
a+=b  a.pulsAssign(b)
a-=b a.minusAssign(b)
a*=b a.timesAssign(b)
a/=b a.divAssign(b)
a%=b a.modAssign(b)
fun main(arg: Array<String>) {
val myString = myString()
myString.value="sss"
myString*=3
print(myString) }
class myString{
var value :String = "hello"
override fun toString(): String {
return "myString(value='$value')"
} } operator fun myString.timesAssign(n:Int):Unit{
val v =this.value
for (i in 1..n-1)
this.value+=v
}

逻辑操作符重载

表达式 对应的函数
a>b a.compaerTo(b)>0
a<b a.compaerTo(b)<0
a>=b a.compaerTo(b)>=0
a<=b a.compaerTo(b)<=0
a==b a?.equals(b)?(b==null)
a!=b !a?.equals(b)?(b==null)
fun main(arg: Array<String>) {

    val myClass1 = myClass(1, 2)
val myClass2 = myClass(1, 2)
val myClass3 = myClass(3, 4)
println(myClass1 == myClass2)
println(myClass3 == myClass2)
} class myClass(a: Int, b: Int) {
private var a: Int = a
private var b: Int = b
operator fun compareTo(c: myClass): Int {
var m = this.a + this.b
var n = c.a + c.b
return m - n } override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false other as myClass if (a != other.a) return false
if (b != other.b) return false return true
} override fun hashCode(): Int {
var result = a
result = 31 * result + b
return result
} }

最新文章

  1. css样式加载顺序及覆盖顺序深入理解
  2. Spark on Yarn:任务提交参数配置
  3. Properties
  4. Web API应用架构在Winform混合框架中的应用(1)
  5. UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
  6. Arduino学习笔记二:修改LED点灯程序
  7. c,c++函数返回多个值的方法
  8. IOS 学习笔记(1) 视图UIViewController
  9. 【百度地图API】关于如何进行城市切换的三种方式
  10. 团队作业3--需求改进&amp;系统设计
  11. 安装Oracle之后在DOS命令下不能使用sqlplus命令启动Oracle?
  12. 分布式文件系统FastDFS如何做到高可用
  13. 【Shader拓展】Illustrative Rendering in Team Fortress 2
  14. 访问PHP文件时出现An error occurred.
  15. [ZJOI2007] 捉迷藏
  16. SQL Update
  17. js常用的400个特效
  18. 关于chrome密码保存框的神坑,这样子解决就行
  19. NodeJs——router报错原因
  20. tf 随机数

热门文章

  1. computed和watch的使用场景
  2. Computer Vision_33_SIFT:PCA-SIFT A More Distinctive Representation for Local Image Descriptors——2004
  3. grafana根据不同prometheus server统计数据
  4. rt-thread下调试elmfat 问题记录
  5. ThreadLocal 是什么?(未完成)有哪些使用场景?(未完成)
  6. Thinkphp 两级联动
  7. spring-JDBC配置,使用,一些报错,mybatis原理,优化
  8. C指针的运算
  9. Spring boot dubbo+zookeeper 搭建------基于gradle项目的消费端与服务端分离实战
  10. MongoDB 运维实总结