当前位置:嗨网首页>书籍在线阅读

25-运算符重载

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.7 运算符重载

运算符重载是C++语言支持的特性,但Java语言中并不支持,很多高级科学运算都会涉及运算符重载。为了方便,Kotlin语言又重新支持此特性。

Kotlin提供了一些固定的操作符,这些预定义运算符的操作对象只能是基本数据类型,实际上,很多自定义的对象也需要有类似的运算操作,这就涉及运算符的重载问题。运算符重载是对已有的运算符赋予多重含义,使得同一个运算符作用于不同类型的数据会导致不同的作用结果。

重载一个运算符时,必须重写它所对应的operator方法。例如,针对加法运算符的定义如下。

public operator fun plus(other: Byte): Float

从上面的定义可以看出,运算符重载的实质就是函数重载。在具体实现上,首先把指定的运算表达式转化为对运算方法的调用,运算对象转化为运算符方法的实参,然后根据实参的类型来确定需要调用的目标函数,之后Kotlin会将对应的符号运算转换到具体的方法之中,这一过程直接由编译器在编译过程中完成。例如,Float类型针对加法运算符的定义如下。

public operator fun plus(other: Byte): Float
public operator fun plus(other: Int): Float
public operator fun plus(other: Short): Float
public operator fun plus(other: Long): Float
public operator fun plus(other: Float): Float
public operator fun plus(other: Double): Float

对于运算符重载来说,操作的表达式不一样,其转换方法也会不一样。根据操作对象的不同,运算符分为一元运算符、二元操作符和位运算操作符。