实战 Groovy: Groovy 的腾飞
2009-11-19 00:00:00 来源:WEB开发网在清单 9 中,有两个定义的类型 —— 一个 Customer 和一个 Wallet。请注意 Customer 类型公开自己的 wallet 实例的方式。正如前面所说的,代码简单的公开方式存在问题。例如,如果我(像原文章的作者所做的那样)添加了一个坏报童,去抢劫那些不知情客户的钱包,又会怎么样?在清单 10 中,我使用了 Groovy 的方法指针来做这件坏事。请注意我是如何使用 Groovy 新的 & 方法指针语法,通过 Customer 实例夺取对 subtractMoney 方法的引用。
清单 10. 添加坏报童 ...iwallet = new Wallet(value:new BigDecimal(32))
victim = new Customer(firstName:"Lane", lastName:"Meyer", wallet:iwallet)
victim.getWallet().subtractMoney(new BigDecimal("0.10"))//Didn't *ask* for a dime. Two Dollars.
//paperboy turns evil by snatching a reference to the subtractMoney method
mymoney = victim.wallet.&subtractMoney
mymoney(new BigDecimal(2)) // "I want my 2 dollars!"
mymoney(new BigDecimal(25)) // "late fees!"
现在,不要误会我:方法指针不是为了侵入代码或者获得对人们现金的引用!方法指针只是一种方便的机制。方法指针也很适合于重新连接上您喜爱的 80 年代的老电影!但是,如果您把这些可爱的、漂亮的东西弄湿了,那么它们可就帮不上您的忙了。严格地说,可以把 Groovy 的 println 快捷方式当作 System.out.println 的隐式方法指针。
如果一直都很留心,那么您可能已经注意到,JSR Groovy 要求我使用新的 & 语法来创建 subtractMoney 方法的指针。您可能已经猜到,这个添加消除了经典 Groovy 中的歧义性。
一些新东西!
如果在 Groovy 的 JSR 发行版中没有什么新东西,那就没有意思了,不是吗?谢天谢地,JSR Groovy 引入了 as 关键字,它是一个方便的类型转换机制。这个特性与新的对象创建语法关系密切,新的语法可以用类似数组的语法很容易地在 Groovy 中创建非定制 类。所谓非定制,指的是在 JDK 中可以找到的类,例如 Color、Point、File,等等。
在清单 11 中,我用这个新语法创建了一些简单类型:
清单 11. Groovy 中的新语法def nfile = ["c:/dev", "newfile.txt"] as File
def val = ["http", "www.vanwardtechnologies.com", "/"] as URL
def ival = ["89.90"] as BigDecimal
println ival as Float
注意,我用便捷语法创建了一个新 File 和 URL,还有 BigDecimal ,还要注意的是,我可以用 as 把 BigDecimal 类型转换成 Float 类型。
接下来是什么呢?
JSR 对 Groovy 的规范化过程并没有结束,特别是在有些东西在 Groovy 的当前版本中(在本文发布时是 JSR-2)仍然不起作用的情况下。例如,在新的 Groovy 中,不能用 do/while 循环。此外,新的 Groovy 还无法完全支持 Java 5.0 的 for 循环概念。结果是,可以使用 in 语法,但是不能使用新推出的 : 语法。
这些都是重要的特性,不能没有,但是不用担心 —— Groovy 小组正在努力工作,争取在未来几个月内实现它们。
- ››Groovy轻松入门
- ››实战:企业使用交换机VLAN路由配置
- ››实战案例分析:高质量软文对网站百度排名的影响
- ››实战经验浅谈网站搬家后的优化工作
- ››实战Active Directory站点部署与管理,Active Dir...
- ››实战操作主机角色转移,Active Directory系列之十...
- ››实战经验:巧用微博推广淘宝网店
- ››实战iPhone GPS定位系统
- ››实战Linux环境配置DBD:Oracle模块
- ››实战DeviceIoControl系列之一:通过API访问设备驱...
- ››实战DeviceIoControl系列之二:获取软盘/硬盘/光盘...
- ››实战DeviceIoControl系列之三:制作磁盘镜像文件
更多精彩
赞助商链接