文章目录
一、运算符重载二、运算符重载对应方法三、完整代码示例一、运算符重载
Groovy 类可以进行运算符重载 , 任何一个类都可以使用预定义的 运算符 进行运算 , 如 " + - * / " 加减乘除 操作 , Groovy 中支持 262626 种运算符的重载操作 ;
如 : 定义一个 Age 类 , 该类代表年龄 , 为该类进行 " + " 运算符重载 ;
class Age {def ageNumber@OverrideString toString() {return "ageNumber : " + ageNumber}}
要实现 " + " 运算符重载 , 只需要在该类中定义 plus 方法即可 , 既可以支持 与 Number 数字相加 , 又可以支持与 其它 Age 对象相加 ; 如果传入其它类型的参数 , 直接抛出异常 ;
class Age {def ageNumberdef plus(age) {// 传入的参数是 数字类型 , 如 int , float 等类型if (age instanceof Number) {// 处理 Age 对象与数字相加的情况new Age(ageNumber: ageNumber + age)} else if (age instanceof Age) {// 处理 Age 对象与 Age 对象相加的情况new Age(ageNumber: ageNumber + age.ageNumber)} else {// 如果 + 符号后面既不是数字 , 又不是 Age 对象// 直接抛出异常throw new MissingMethodException("plus", Age.class)}}@OverrideString toString() {return "ageNumber : " + ageNumber}}
二、运算符重载对应方法
三、完整代码示例
完整代码示例 :
class Age {def ageNumberdef plus(age) {// 传入的参数是 数字类型 , 如 int , float 等类型if (age instanceof Number) {// 处理 Age 对象与数字相加的情况new Age(ageNumber: ageNumber + age)} else if (age instanceof Age) {// 处理 Age 对象与 Age 对象相加的情况new Age(ageNumber: ageNumber + age.ageNumber)} else {// 如果 + 符号后面既不是数字 , 又不是 Age 对象// 直接抛出异常throw new MissingMethodException("plus", Age.class)}}@OverrideString toString() {return "ageNumber : " + ageNumber}}// 创建两个 Age 对象def age = new Age(ageNumber: 18)def age2 = new Age(ageNumber: 18)// Age 对象与 Number 类型数据相加println age + 100// Age 对象之间相加println age + age2// Age 对象与不支持的类型相加 , 会直接抛出异常println age + "100"
执行结果 :
ageNumber : 118ageNumber : 36Caught: groovy.lang.MissingMethodException: No signature of method: Age.plus() is applicable for argument types: () values: []Possible solutions: plus(java.lang.Object), use([Ljava.lang.Object;), split(groovy.lang.Closure), is(java.lang.Object), use(java.lang.Class, groovy.lang.Closure), use(java.util.List, groovy.lang.Closure)groovy.lang.MissingMethodException: No signature of method: Age.plus() is applicable for argument types: () values: []Possible solutions: plus(java.lang.Object), use([Ljava.lang.Object;), split(groovy.lang.Closure), is(java.lang.Object), use(java.lang.Class, groovy.lang.Closure), use(java.util.List, groovy.lang.Closure)at Age.plus(Groovy.groovy:15)at Age$plus.call(Unknown Source)at Groovy.run(Groovy.groovy:30)
如果觉得《【Groovy】Groovy 运算符重载 ( 运算符重载 | 运算符重载对应方法 )》对你有帮助,请点赞、收藏,并留下你的观点哦!