前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Groovy】Groovy 运算符重载 ( 运算符重载 | 运算符重载对应方法 )

【Groovy】Groovy 运算符重载 ( 运算符重载 | 运算符重载对应方法 )

作者头像
韩曙亮
发布2023-03-30 10:22:46
2.7K0
发布2023-03-30 10:22:46
举报

文章目录

一、运算符重载


Groovy 类可以进行运算符重载 , 任何一个类都可以使用预定义的 运算符 进行运算 , 如 " + - * / " 加减乘除 操作 , Groovy 中支持

26

种运算符的重载操作 ;

如 : 定义一个 Age 类 , 该类代表年龄 , 为该类进行 " + " 运算符重载 ;

代码语言:javascript
复制
class Age {
    def ageNumber
    
    @Override
    String toString() {
        return "ageNumber : " + ageNumber
    }
}

要实现 " + " 运算符重载 , 只需要在该类中定义 plus 方法即可 , 既可以支持 与 Number 数字相加 , 又可以支持与 其它 Age 对象相加 ; 如果传入其它类型的参数 , 直接抛出异常 ;

代码语言:javascript
复制
class Age {
    def ageNumber

    def 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)
        }
    }

    @Override
    String 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

三、完整代码示例


完整代码示例 :

代码语言:javascript
复制
class Age {
    def ageNumber

    def 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)
        }
    }

    @Override
    String 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"

执行结果 :

代码语言:javascript
复制
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)
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、运算符重载
  • 二、运算符重载对应方法
  • 三、完整代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档