Groovy's ExpandoMetaClass features allows us to override the getProperty()
method for a class. This method is invoked if we want to access a property for an object. We can look up existing properties and return their result, but we can also write behaviour for the situation when the property doesn't exist.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class User { String username } User.metaClass.getProperty = { String propName -> def meta = User.metaClass.getMetaProperty(propName) if (meta) { meta.getProperty(delegate) } else { 'Dynamic property for User' } } def mrhaki = new User(username: 'mrhaki' ) def hubert = new User(username: 'hubert' ) assert 'mrhaki' == mrhaki.username assert 'Dynamic property for User' == mrhaki.fullname |