快速业务通道

实战 Groovy: 用 Groovy 减少代码冗余 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
"\n: status -- " + status + ".\n"; } public String getManufacturer() { return manufacturer; } public void setManufacturer(String manufacturer) { this.manufacturer = manufacturer; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public int getFrame() { return frame; } public void setFrame(int frame) { this.frame = frame; } public String getSerialNo() { return serialNo; } public void setSerialNo(String serialNo) { this.serialNo = serialNo; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public BigDecimal getCost() { return cost; } public void setCost(BigDecimal cost) { this.cost = cost.setScale(3,BigDecimal.ROUND_HALF_UP); }}

实战 Groovy: 用 Groovy 减少代码冗余(2)

时间:2011-08-27 IBM Sailing

清单 1 是一个只有一个构造方法和六个属性的小例子,但其代码却填满了浏 览器的整个页面!清单 2 显示了在 Groovy 中定义的相同的 JavaBean:

清单 2. Bike GroovyBean

class Bike {  String manufacturer  String model  Integer frame  String serialNo  Double weight  String status  BigDecimal cost  public void setCost(BigDecimal newCost) {    cost = newCost.setScale(3, BigDecimal.ROUND_HALF_UP)  }  public String toString() {    return """Bike:         manufacturer --  ${manufacturer}         model -- ${model}         frame -- ${frame}         serialNo -- ${serialNo}      """  }}

您认为哪一个没那么多冗余呢?

Groovy 版的代码要少很多很多,这是因为 Groovy 的默认属性语义用 public 访问器和存取器自动 定义了 private 域。例如,上述 model 属性现在有了自动定义的 getModel() 方法和 setModel() 方 法。可以看到,这项技术的好处是,不必在一种类型中按照属性手工定义两个方 法!这也解释了 Groovy 中的一条反复强调的定律:使普通的编码规则变得简单。

另外,在 Groovy 中,类的默认函数表达得更为简洁,而在常规 Java 代码( 如 清单 1)中该函数 必须显式编码。当需要用构造函数或 getter 或 setter 来完成一些特殊任务时 ,Groovy 真的很出色, 因为只需瞥一眼代码,其精彩的行为就会立即变得十分明显。例如,在 清单 2 中很容易看出, setCost() 方法会将 cost 属性换算为三个十进制的位。

将这段不太显眼的 Groovy 代码同 清单 1 中的 Java 源代码进行比较。第一 次阅读这段代码时,您 注意到 setCost() 方法中嵌入了特殊的函数了吗?除非仔细观察,否则太容易看 漏了!

Groovy 测试

清单 3 中 Bike 类的测试用例展示了如何使用自动生成的访问器。同时,出 于进一步简化通用编程 任务的考虑,测试用例也使用了更为简便的 Groovy 点属性名 标记来访问属性。 相应地,能够通过 getModel() 方法或更为简洁的 b.model 形式来引用 model 属性。

清单 3. Groovy 中的 Bike 测试用例

class BikeTest extends GroovyTestCase {  void testBike() {    // Groovy way to initialize a new object    def b = new Bike(manufacturer:"Shimano", model:"Roadmaster")    // explicitly call the default accessors    assert b.getManufacturer()

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号