In Groovy we can add new methods to classes with ExpandoMetaClass using the leftShift (<<) operator. If the method already exists we get an error. To override an existing method we can use the equal operator (=). But we can also use the equal operator (=) to add a new method, but then we don't get an error when the method already exists.
Integer.metaClass.eights << { delegate * 8 }
assert 32 == 4.eights()
Integer.metaClass.hundreds = { delegate * 100 }
assert 200 == 2.hundreds()
try {
Integer.metaClass.toString << { 'Groovy' } // Cannot use << for existing method.
assert false
} catch (e) {
assert 'Cannot add new method [toString] for arguments [[]]. It already exists!' == e.message
}
Integer.metaClass.toString = { 'Groovy' }
assert 'Groovy' == 100.toString()