走进Groovy世界--世界基石

本文介绍了Groovy语言的纯面向对象特性,包括一切皆对象的理念、数据类型的灵活定义及操作符重载等高级特性。
原本准备一天写一篇的,只是由于工作的原因,没有那么多时间看书,所以了解的东西自然也就相应的少了,也就没什么东西可写了。

看了一些Groovy的东西后,又有另一样东西吸引了我,那就是她的纯面向对象,呵,面向对象已经听了好多年了,而且也用了好多年了,但大家都知道,既使是我们熟悉的Java,也不是纯面向对象的,在Java里,同时存在着原类型和对象,而在Groovy里,却是一切皆为对象。

大家都知道,Java里是不能对原类型执行一些平时对对象所做的操作的,如toString()这些,如果想要这样做,则需将其转换成相对应的Wrapper,在Java里原类型相应的都有一些Wrapper,如int对应的java.lang.Integer。

虽然在Groovy里,你可能也会看到如Java里定义原类型一样的语句,如:
[code]int i = 1[/code]
表面上是一样,但实际上,她还是会把变量转换成类似于Java里的Wrapper类型的,也就是说,你可以对变量i执行如toString()这些在Java不能对原类型执行的方法。原因就是因为在Groovy里一切皆为对象,呵,是不是很吸引人?

与Java相似,在定义基本的数据类型时,可以直接根据字面指定,如:
[code]Integer -> 100
Long -> 100L/100l
Float -> 100F/100f
Double -> 100D/100d[/code]
在这里比Java多了两个可以直接由字面表示的类型:
[code]BigInteger -> 100G/100g
BigDecimal -> 100.123G/100.123g[/code]
在数据后加G(or g)来标识这两种类型。

BigDecimal为非整型的数字的默认类型,如果不使用Float和Double的后缀标识,如F或D,将使用BigDecimal。

在Groovy里定义变量也有很趣,可以有两种方式,一种是定义静态类型,也就是在定义之初就指定变量的类型,如:
[code]int i = 100
String s = "hello"[/code]
还有一种,则是动态类型,在定义的时候不指定其类型,之后可以随意的更改此对象的类型,如:
[code]def i = 100
i = "string"
i = true[/code]

在Java里,一些操作符,如+, -, *, /这些,只是对原类型数据进行操作的,虽然个别的也可以由其他类型使用。但在Groovy里,这些对应的全是方法,这样的写法只是一种简写,它还会调用相应的类里面的方法的,如100+200,其实是调用100.plus(200);100-200调用的是100.minus(200)。所有的这些,都是对方法的调用。

在Groovy里,这些操作符将不再是原类型的专用,你完全可以执行这样的操作:
[code]
Person p1 = new Person()
Person p2 = new Person()
Person p3
p3 = p1 + p2
p3 = p1 - p2
p3 = p1 * p2
p3 = p1 / p2
println p1 == p2[/code]
执行上面的例子的前提是Person类实现了相应的方法。这里只是随便瞎写一个例子,一点实际意义都没有。另外,在重载equals时,最好复写hashCode方法,重载这个方法已经不新鲜了,参见java.lang.Object#equals,在这里一块写出来,只是为上说明,可以直接用==操作符来简写equals方法的调用。
[code]class Person {
private String name

Person() {}

Person(name) {
this.name = name
}

Person plus(Person b) {
if (null == b) return null
return new Person(this.name + " + " + b.name)
}

Person minus(Person b) {
if (null == b) return null
return new Person(this.name + " - " + b.name)
}

Person multiply(Person b) {
if (null == b) return null
return new Person(this.name + " * " + b.name)
}

Person div(Person b) {
if (null == b) return null
return new Person(this.name + " / " + b.name)
}

Person mod(Person b) {
if (null == b) return null
return new Person(this.name + " % " + b.name)
}

Person power(Person b) {
if (null == b) return null
return new Person(this.name + " ** " + b.name)
}

boolean equals(Object b) {
if (null == b) return false
if (!(b instanceof Person)) return false
if (this.name != b.name) return false
return true
}

int hashCode() {
return this.name.hashCode()
}
}[/code]

看到这些,让我想起在学C++时最讨厌的运算符重载,呵呵,不过在这里确实是存在的。

在Groovy里,可以重载的方法有很多,可以相阅相关的资料来了解,在《Groovy in Action》上有详细的列表。

虽然这对于Java是一个进步,但我却不是很喜欢这种方式,因为要实现+,我在程序里要实现的却是plus方法,而在Ruby里,直接实现+就OK了,或许是因为历史原因吧,还没有深入的研究,不过猜想应该是Java的罪过。

虽然人家都说,时间就像乳沟一样,挤挤总会有的,但这段时间确实是太忙了,所以进度也是奇慢无比,只能给自己一个借口,美其名曰:小步前进。呵
源码来自:https://pan.quark.cn/s/a4b39357ea24 ### 操作指南:洗衣机使用方法详解#### 1. 启动与水量设定- **使用方法**:使用者必须首先按下洗衣设备上的“启动”按键,同时依据衣物数量设定相应的“水量选择”旋钮(高、中或低水量)。这一步骤是洗衣机运行程序的开端。- **运作机制**:一旦“启动”按键被触发,洗衣设备内部的控制系统便会启动,通过感应器识别水量选择旋钮的位置,进而确定所需的水量高度。- **技术执行**:在当代洗衣设备中,这一流程一般由微处理器掌管,借助电磁阀调控进水量,直至达到指定的高度。#### 2. 进水过程- **使用说明**:启动后,洗衣设备开始进水,直至达到所选的水位(高、中或低)。- **技术参数**:水量的监测通常采用浮子式水量控制器或压力感应器来实现。当水位达到预定值时,进水阀会自动关闭,停止进水。- **使用提醒**:务必确保水龙头已开启,并检查水管连接是否牢固,以防止漏水。#### 3. 清洗过程- **使用步骤**:2秒后,洗衣设备进入清洗环节。在此期间,滚筒会执行一系列正转和反转的动作: - 正转25秒 - 暂停3秒 - 反转25秒 - 再次暂停3秒- **重复次数**:这一系列动作将重复执行5次,总耗时为280秒。- **技术关键**:清洗环节通过电机驱动滚筒旋转,利用水流冲击力和洗衣液的化学效果,清除衣物上的污垢。#### 4. 排水与甩干- **使用步骤**:清洗结束后,洗衣设备会自动进行排水,将污水排出,然后进入甩干阶段,甩干时间为30秒。- **技术应用**:排水是通过泵将水抽出洗衣设备;甩干则是通过高速旋转滚筒,利用离心力去除衣物上的水分。- **使用提醒**:...
代码下载地址: https://pan.quark.cn/s/c289368a8f5c 在安卓应用开发领域,构建一个高效且用户友好的聊天系统是一项核心任务。 为了协助开发者们迅速达成这一目标,本文将分析几种常见的安卓聊天框架,并深入说明它们的功能特性、应用方法及主要优势。 1. **环信(Easemob)** 环信是一个专为移动应用打造的即时通讯软件开发套件,涵盖了文本、图片、语音、视频等多种消息形式。 通过整合环信SDK,开发者能够迅速构建自身的聊天平台。 环信支持消息内容的个性化定制,能够应对各种复杂的应用场景,并提供多样的API接口供开发者使用。 2. **融云(RongCloud)** 融云作为国内领先的IM云服务企业,提供了全面的聊天解决方案,包括一对一交流、多人群聊、聊天空间等。 融云的突出之处在于其稳定运行和高并发处理性能,以及功能完备的后台管理工具,便于开发者执行用户管理、消息发布等操作。 再者,融云支持多种消息格式,如位置信息、文件传输、表情符号等,显著增强了用户聊天体验。 3. **Firebase Cloud Messaging(FCM)** FCM由Google提供的云端消息传递服务,可达成安卓设备与服务器之间的即时数据交换。 虽然FCM主要应用于消息推送,但配合Firebase Realtime Database或Firestore数据库,开发者可以开发基础的聊天软件。 FCM的显著优势在于其全球性的推送网络,保障了消息能够及时且精确地传输至用户。 4. **JMessage(极光推送)** 极光推送是一款提供消息发布服务的软件开发工具包,同时具备基础的即时通讯能力。 除了常规的文字、图片信息外,极光推送还支持个性化消息,使得开发者能够实现更为复杂的聊天功能。 此...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值