Groovy has a with method we can use to group method calls and property access to an object. The with method accepts a closure and every method call or property access in the closure applies to the object if applicable. The method is part of Groovy's extensions to the java.lang.Object
class. Let's see this with an example:
class Sample { String username String email List<String> labels = [] def speakUp() { "I am $username" } def addLabel(value) { labels << value } } def sample = new Sample() sample.with { username = 'mrhaki' email = 'email@host.com' println speakUp() // Output: I am mrhaki addLabel 'Groovy' addLabel 'Java' } assert 2 == sample.labels.size() assert 'Groovy' == sample.labels[0] assert 'Java' == sample.labels[1] assert 'mrhaki' == sample.username assert 'email@host.com' == sample.email def sb = new StringBuilder() sb.with { append 'Just another way to add ' append 'strings to the StringBuilder ' append 'object.' } assert 'Just another way to add strings to the StringBuilder object.' == sb.toString() // Another example as seen at // http://javajeff.blogspot.com/2008/11/getting-groovy-with-with.html def cal = Calendar.instance cal.with { clear() set(YEAR, 2009) set MONTH, SEPTEMBER set DATE, 4 add DATE, 2 } assert'September 6, 2009' == cal.time.format('MMMM d, yyyy')