【Groovy】Groovy 运算符重载 ( 运算符重载 | 运算符重载对应方法 )
生活随笔
收集整理的這篇文章主要介紹了
【Groovy】Groovy 运算符重载 ( 运算符重载 | 运算符重载对应方法 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、運算符重載
- 二、運算符重載對應方法
- 三、完整代碼示例
一、運算符重載
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} }二、運算符重載對應方法
| a + b | a.plus(b) |
| a – b | a.minus(b) |
| a * b | a.multiply(b) |
| a ** b | a.power(b) |
| a / b | a.div(b) |
| a % b | a.mod(b) |
| a | b |
| a & b | a.and(b) |
| a ^ b | a.xor(b) |
| a++ or ++a | a.next() |
| a– or –a | a.previous() |
| a[b] | a.getAt(b) |
| a[b] = c | a.putAt(b, c) |
| a << b | a.leftShift(b) |
| a >> b | a.rightShift(b) |
| switch(a) { case(b) : } | b.isCase(a) |
| ~a | a.bitwiseNegate() |
| -a | a.negative() |
| +a | a.positive() |
| a == b | a a.equals(b) or a.compareTo(b) == 0 ** |
| a != b | a ! a.equals(b) |
| a <=> b | a a.compareTo(b) |
| a > b | a .compareTo(b) > 0 |
| a >= b | a a.compareTo(b) >= 0 |
| a < b | a a.compareTo(b) < 0 |
| a <= b | a a.compareTo(b) <= 0 |
三、完整代碼示例
完整代碼示例 :
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 : 118 ageNumber : 36 Caught: 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 运算符重载 ( 运算符重载 | 运算符重载对应方法 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】Groovy 方法调用
- 下一篇: 【Groovy】使用 Groovy 语言