Если вы знаете Java, лучше всего прочитать, как метакласс используется в Groovy. Вот достойное объяснение: http://skillsmatter.com/downloads/Groovy%20User%20Group%20December%202006.pdf
Просто помните, что все в Groovy проходит через метакласс. На первый взгляд простые утверждения:
a = foo.bar
bar = b
foo.baz(1,2,3)
Перевести примерно на эту Java:
a = foo.getMetaClass().getProperty("bar");
this.getMetaClass().setProperty("bar",b);
foo.getMetaClass().invokeMethod("baz",new Object[] {1,2,3});
Все отправляется через метакласс, то есть как работают почти все языковые функции Groovy. Наиболее важной особенностью является, вероятно, замыкания . Что нужно помнить о замыканиях, так это то, что это обман метакласса. MetaClass замыкания может быть настроен на попытку вызова методов / разрешения свойств для его делегата, что в основном означает, что вы можете делать такие вещи, как вызов метода для объекта, у которого нет этого метода.