groovy–运算符重载
Groovy支持运算符重载,各种运算符被映射到普通的java对象的方法调用,这就使得开发者可以利用运算符重载的优势来编写自己的Java或者groovy对象。
下面的表格描述了groovy中的操作符所映射到的方法:
|
Operator |
Method |
|
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.or(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() |
另外需要注意的是下面的所有的操作符,在遇到null的时候,都不会抛出java.lang.NullPointerException
|
Operator |
Method |
|
a == b |
a.equals(b) or a.compareTo(b) == 0 ** |
|
a != b |
! a.equals(b) |
|
a <=> b |
a.compareTo(b) |
|
a > b |
a.compareTo(b) > 0 |
|
a >= b |
a.compareTo(b) >= 0 |
|
a < b |
a.compareTo(b) < 0 |
|
a <= b |
a.compareTo(b) <= 0 |
需要注意的是,“==”操作符并不总是和equals()方法等价。
比如:
1 |
def a = null |
2 |
def b = "foo" |
3 |
4 |
assert a != b |
5 |
assert b != a |
6 |
assert a == null |
无论a或者b谁是null,都不会抛出java.lang.NullPointerException。
另外在不同类型的对象之间比较的时候,强制类型转换规则使用于把数字类型转换为最大的数字类型。所以下面的代码是有效的:
1 |
Byte a = 12 |
2 |
Double b = 10 |
3 |
4 |
assert a instanceof Byte |
5 |
assert b instanceof Double |
6 |
7 |
assert a > b |
groovy–运算符重载的更多相关文章
- 看懂Gradle脚本(4)- Groovy语法之运算符重载
继续讨论Task定义 回想一下前一篇文章的样例: task myTask { doLast { println 'hello world!' } } 这段脚本定义了一个名为myTask的任务.而且通过 ...
- groovy运算符
import java.util.regex.Matcher /** * Created by Jxy on 2018/12/20 10:29 * groovy运算符 */ /*class opera ...
- C++ 运算符重载时,将运算符两边对象交换问题.
在C++进行运算符重载时, 一般来讲,运算符两边的对象的顺序是不能交换的. 比如下面的例子: #include <iostream> using namespace std; class ...
- C#高级编程笔记2016年10月12日 运算符重载
1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...
- C++运算符重载
C++运算符重载 基本知识 重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和其后要定义的运算符号共同组成. 运算符可以重载为成员函数和非成员函数.当一个重载的运算符是成员函数时, ...
- 标准C++之运算符重载和虚表指针
1 -> *运算符重载 //autoptr.cpp #include<iostream> #include<string> using namespace std ...
- python运算符重载
python运算符重载就是在解释器使用对象内置操作前,拦截该操作,使用自己写的重载方法. 重载方法:__init__为构造函数,__sub__为减法表达式 class Number: def __in ...
- PoEduo - C++阶段班【Po学校】-Lesson03-5_运算符重载- 第7天
PoEduo - Lesson03-5_运算符重载- 第7天 复习前面的知识点 空类会自动生成哪些默认函数 6个默认函数 1 构造 2 析构 3 赋值 4 拷贝构造 5 oper ...
- 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换
[源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...
随机推荐
- Eclipse快捷键列表大全
from: http://hi.baidu.com/lzycsd/item/c6febccceacc173c44941684 from: http://www.open-open.com/bbs/vi ...
- 导航程序调试1---MFC应用以及数据显示程序
问题 error C2664: "BuildCommDCBW": 不能将参数 1 从"char *"转换为"LPCWSTR"经常出现这样的错 ...
- 如何“刷leetcode”
做题目的: 获得 offer 巩固算法与数据结构知识,将学到的东西用出来 如何做题: 根据章节与难度来做. 比如你学了 linked list,就去找到标签为 linked list 的题目,然后根据 ...
- Microsoft Visual Studio 正忙
简介:Microsoft Visual Studio 正忙,Microsoft Visual Studio 正在等待内部操作完成.如果经常在正常使用的情况下遇到此延迟, 请向Microsoft报告此情 ...
- pandas 数据索引与选取
我们对 DataFrame 进行选择,大抵从这三个层次考虑:行列.区域.单元格.其对应使用的方法如下:一. 行,列 --> df[]二. 区域 --> df.loc[], df.ilo ...
- HTTP协议简介2
几个相关的知识点: 客户端发送请求时,请求类型为GET与POST的主要差别是什么? 1.请求类型不同,一个为GET,一个为POST 2.当请求类型为GET时,请求的数据以参数的形式添加到url的后面, ...
- Qt中通过ui怎么引用不了pushbutton呢? 原来是这样…
在Qt中打开一个项目在做, 突然想到要测量一下其中一个子系统,于是在当前环境下新建了一个项目并用qt designer 简单设计了一下ui,其中添加了pushbutton并命名为OpensourceB ...
- 学习Shell脚本编程(第5期)_表达式的比较
字符串操作符 逻辑运算符 用test比较的运算符 数字比较符 文件操作符 在Shell程序中,通常使用表达式比较来完成逻辑任务.表达式所代表的操作符有字符操作符.数字操作符.逻辑操作符.以及文件操作符 ...
- [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
12.3 We have the following method used in a chess game: boolean canMoveTo( int x, int y). This metho ...
- 信息安全系统设计基础exp_4
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1353 姓名:郑伟.吴子怡 学号:20135322.20135313 指导教师: 娄嘉鹏 实验 ...