WEB开发网
开发学院软件开发Java 实战 Groovy: Groovy 的腾飞 阅读

实战 Groovy: Groovy 的腾飞

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 在清单 9 中,有两个定义的类型 —— 一个 Customer 和一个 Wallet,实战 Groovy: Groovy 的腾飞(8),请注意 Customer 类型公开自己的 wallet 实例的方式,正如前面所说的,不能没有,但是不用担心 ——

在清单 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 小组正在努力工作,争取在未来几个月内实现它们。

上一页  3 4 5 6 7 8 

Tags:实战 Groovy Groovy

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接