实战 Groovy: 用 Groovy 减少代码冗余 - 编程入门网
"\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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |