实战 Groovy: 在 Java 应用程序中加一些 Groovy 进来
2009-11-19 00:00:00 来源:WEB开发网反编译
反编译这些类可能会非常有趣。由于 Groovy 处于代码顶层,所以生成的 .java 文件可能相当巨大;不过,您应当注意的是 Groovy 脚本中声明的类(如 Person) 与类之外的代码(比如 BusinessObjects.class 中找到的代码)之间的区别。在 Groovy 文件中定义的类完成了 GroovyObject 的实现,而在类之外定义的代码则被绑定到一个扩展自 Script 的类。
例如,如果研究由 BusinessObjects.class 生成的 .java 文件,可以发现:它定义了一个 main() 方法和一个 run() 方法。不用惊讶, run() 方法包含我编写的、用来创建这些对象的新实例的代码,而 main() 方法则调用 run() 方法。
这个细节的全部要点再一次回到了:对 Groovy 的理解越好,就越容易把它集成到 Java 程序中。有人也许会问:“为什么我要这么做呢?”好了,我们想说您用 Groovy 开发了一些很酷的东西;那么如果能把这些东西集成到 Java 程序中,那不是很好吗?
只是为了讨论的原因,我首先试图 用 Groovy 创建一些有用的东西,然后我再介绍把它嵌入到普通 Java 程序中的各种方法。
再制作一个音乐 Groovy
我热爱音乐。实际上,我的 CD 收藏超过了我计算机图书的收藏。多年以来,我把我的音乐截取到不同的计算机上,在这个过程中,我的 MP3 收藏乱到了这样一种层度:只是表示品种丰富的音乐目录就有一大堆。
最近,为了让我的音乐收藏回归有序,我采取了第一步行动。我编写了一个快速的 Groovy 脚本,在某个目录的 MP3 收藏上进行迭代,然后把每个文件的详细信息(例如艺术家、专辑名称等)提供给我。脚本如清单 3 所示:
清单 3. 一个非常有用的 Groovy 脚本package com.vanward.groovy
import org.farng.mp3.MP3File
import groovy.util.AntBuilder
class Song {
mp3file
Song(String mp3name){
mp3file = new MP3File(mp3name)
}
getTitle(){
mp3file.getID3v1Tag().getTitle()
}
getAlbum(){
mp3file.getID3v1Tag().getAlbum()
}
getArtist(){
mp3file.getID3v1Tag().getArtist()
}
String toString(){
"Artist: " + getArtist() + " Album: " +
getAlbum() + " Song: " + getTitle()
}
static getSongsForDirectory(sdir){
println "sdir is: " + sdir
ant = new AntBuilder()
scanner = ant.fileScanner {
fileset(dir:sdir) {
include(name:"**/*.mp3")
}
}
songs = []
for(f in scanner){
songs << new Song(f.getAbsolutePath())
}
return songs
}
}
songs = Song.getSongsForDirectory(args[0])
songs.each{
println it
}
更多精彩
赞助商链接