我对 groovy 很陌生,我希望我愿意这样做。
假设我有一个名为 App.groovy
的类。
class App
{
}
我有另一个名为 DelegateClass
的类,它有两个方法:
edit
create
在其他类(class)中,我需要这样做:
//class Test
def app = new App()
app.editDetails()
app.createDetails()
app.editOtherDetails()
我希望所有以 edit*
开头的方法都转到 DelegateClass
edit
方法,对于 create*
也是如此方法。
我怎样才能做到这一点?
出于好奇,在java中也可以做到同样的事情吗?
最佳答案
所以,假设您有这个委托(delegate)类:
class DelegateClass {
String create( args ) {
"create ${args.join(',')}"
}
String edit( args ) {
"edit ${args.join(',')}"
}
}
然后你可以在你的App类中使用methodMissing
:
class App {
DelegateClass delegate = new DelegateClass()
def methodMissing( String name, args ) {
if( name.startsWith( 'create' ) ) {
delegate.create( args )
}
else if( name.startsWith( 'edit' ) ) {
delegate.edit( args )
}
}
}
所以以下所有内容都有效:
def app = new App()
assert app.editDetails() == 'edit '
assert app.editDetails( 'foo' ) == 'edit foo'
assert app.editDetails( 'foo', 'bar' ) == 'edit foo,bar'
assert app.createDetails( 'tim' ) == 'create tim'
assert app.createOtherDetails() == 'create '
对于java,不存在诸如methodMissing
之类的东西,因此您需要发送描述要调用的方法的字符串到集中处理程序方法,并让其调用您想要的方法。
关于java - Groovy 如何将某些方法委托(delegate)给其他类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21778947/