Groovy,重载<< ZipOutputStream上的运算符

时间:2011-05-27 11:40:36

标签: groovy operator-overloading

基于Google,我设法编写了一个Groovy脚本,根据需要打包拉链。

ZipOutputStream zipOutput = new ZipOutputStream(new FileOutputStream("${uid}.pufi"));

ZipEntry mainentry = new ZipEntry('main.xml')
zipOutput.putNextEntry(mainentry)
zipOutput << "mainmainmain"
zipOutput.closeEntry()

ZipEntry manifentry = new ZipEntry('manifest.xml')
zipOutput.putNextEntry(manifentry)
zipOutput << new FileInputStream(options.manifest)
zipOutput.closeEntry()

它有效,但我想知道Groovy如何在行entry << "foobar"entry << new FileInputStream(..)上找出要调用的内容。我看到ZipOutputStream是一个Java类,它的javadoc不包含任何方法,可以使用偶数String或InputStream参数调用它。你能解释一下它是如何工作的,它在哪里记录?我想更多地了解Groovy ..: - )

1 个答案:

答案 0 :(得分:2)

Groovy为一些基本Java类添加了其他方法,以便以更加 groovy 的方式使用它们。有关其他方法的完整概述,请查看http://groovy.codehaus.org/groovy-jdk。在您的情况下,方法leftShift添加了类OutputStream。 Groovy也会重载<<运算符,因此它与调用对象上的方法leftShift相同。