Groovy, оператор перегрузки << на ZipOutputStream - PullRequest
1 голос
/ 27 мая 2011

на основе Google Мне удалось написать небольшой скрипт на Groovy, который упаковывает zip-файлы так, как мне нужно.

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 Ответ

2 голосов
/ 27 мая 2011

Groovy добавляет дополнительные методы к некоторым базовым Java-классам, чтобы использовать их более groovy . Для полного обзора дополнительных методов смотрите http://groovy.codehaus.org/groovy-jdk. В вашем случае, к методу leftShift был добавлен класс OutputStream . Groovy также перегружает оператор <<, поэтому он аналогичен вызову метода leftShift для объекта.

...