WEB开发网
开发学院软件开发Java 实战 Groovy: 使用闭包、ExpandoMetaClass 和类别... 阅读

实战 Groovy: 使用闭包、ExpandoMetaClass 和类别进行元编程

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 清单 5. 在 Groovy 中发出一个 shell 命令println"ifconfigen0".execute().text//outputen0:flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST>


清单 5. 在 Groovy 中发出一个 shell 命令
println "ifconfig en0".execute().text 
 
//output 
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 
 ether 00:17:f2:cb:bc:6b 
 media: autoselect status: inactive 
 //snip 

我并没有说 Groovy 的优点在于您不能 使用 Java 语言做同样的事情。您当然可以。Groovy 的优点在于这些方法似乎可以直接添加到 String 类 — 这绝非易事,因为 String 是 final 类。(稍后将详细讨论这点)。清单 6 展示了 Java 中的相应内容 String.execute().text:


清单 6. 使用 Java 语言发出 shell 命令
Process p = new ProcessBuilder("ifconfig", "en0").start(); 
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line = br.readLine(); 
while(line != null){ 
 System.out.println(line); 
 line = br.readLine(); 
} 

这看上去有点像在机动车辆管理局的各个窗口之间辗转,不是吗?“对不起,先生,要查看您请求的 String,首先需要去别处获得一个 BufferedReader。”

是的,您可以构建方便的方法和实用类来帮助将这个问题抽象出来,但是惟一的 com.mycompany.StringUtil 替代方法就是使用一个类来代替将方法直接添加到所属位置的行为:String 类。(当然就是 Platypus.layEgg()!)

那么 Groovy 究竟如何做 — 将新方法添加到无法扩展的类,或直接进行修改?要理解这一点,需要了解 closures 和 ExpandoMetaClass。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:实战 Groovy 使用

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