To implement an interface we can use a Groovy map and with the as
keyword we can pass it on to a method. Here is a simple example where we define an implementation of the java.io.FileFilter
as a map. We pass the implementation on to the java.io.File.listFiles()
method to display all files with extensions .css
and .png
:
map = [ // Implement FileFilter.accept(File) method. accept: { file -> file.path ==~ /.*\.(css|png)$/ } ] as FileFilter new File('c:/temp').listFiles(map).each { println it.path }
If the interface we want to implement has more than one method we can only use a map for the implementation. But if the interface only contains one method (as in this case) we can also use a closure for the implementation. In the following example we implement the java.io.FileFilter
interface with a closure to filter all files with the extension .jpg
:
filter = { it.path ==~ /.*\.jpg$/ } new File('c:/temp').listFiles(filter as FileFilter).each { file -> println file.path }