我很开心,我希望我能这样做。
假设我有一个名为App.groovy
的班级。
class App
{
}
我还有其他名为DelegateClass
的类,它有两种方法:
edit
create
在其他课程中,我需要这样做:
//class Test
def app = new App()
app.editDetails()
app.createDetails()
app.editOtherDetails()
我希望所有以edit*
开头的方法都转到DelegateClass
edit
方法,而create*
方法则相同。
我该怎么做?
出于好奇,在java中可以做同样的事情吗?
答案 0 :(得分:3)
所以,假设你有这个委托类:
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
这样的东西,所以你需要发送描述方法的字符串来调用集中处理程序方法,然后调用你想要的方法。