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:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
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 ' )
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 ' )
本文介绍了 Groovy 中的 with 方法,该方法允许在一个闭包中对对象进行方法调用和属性访问。通过示例展示了如何使用 with 方法设置对象属性、执行方法及操作 StringBuilder 对象。
1177

被折叠的 条评论
为什么被折叠?



