JAVA基础 invokeMethod和methodMissing方法
您必须熟悉“invokeMethod”方法。我们可以用下面这个简单的例子来看看它的作用:
classinvokeestor 1 {
def hello()
{
' Invoke hello directly '
}
def Invoke method(String name,Object args)
{
return " Unknown method $ name($ { args . join(',')})"
}
static void main(args){[/br 如果这个方法可以被调度,比如上面的“hello”方法,可以在InvokeStor1类中找到,就被赋给InvokeStor1类的“hello”方法; 如果不能调度,比如上面的“foo”方法,就调用“invokeMethod”方法。
在Groovy语言中,还有一种方法也可以实现上述功能。这就是“methodMissing”方法。请参见下面的示例:
classmethodtestor 1 {
def Hello()
{ " Invoke Hello Directly "
}
def Method missing(string name,args)
{
return " Unknown Method $ name($ { args . join(',')})"
}
static void main(args){
def mt = new Method estor 1()
print它非常类似于“invokeMethod”函数。
这个大家都知道,但实际上Groovy语言中“invokeMethod”是用来调度一个对象的所有方法的。为此,我们需要“GroovyInterceptable”接口的帮助。请看下面的例子:
Class invokeestor 2 implements GroovyInteceptable {
def Hello()
{
" Invoke Hello directly "
}
def Invoke Method(String name,Object args)
{
return " Unknown Method $ name($ { args . join(',')})"
}
static void main(args){即使类实现了“GroovyInterceptable”接口,也不能使用“methodMissing”方法来调度所有方法。请看下面的例子:
Class MethodTester 2实现Groovy Interceptable {
def hello()
{
" Invoke hello directly "
}
def method missing(String name,args)
{
return " Unknown method $ name($ { args . join(',')})"
}
static void main(args){
def 我们可以看到“invokeMethod”方法和“methodMissing”方法的细微区别:即“invokeMethod”方法可以调度所有方法,包括一个类的已实现和未实现的方法; 并且它通过这个类实现“GroovyInterceptable”接口来实现上述功能。另一方面,“methodMissing”方法只能调度类的未实现方法,而不管它是否实现了“GroovyInterceptable”接口。
这个区别真的很微妙。如果我们想要一个方法来管理一个类的所有方法的调用,那么我们必须使用“invokeMethod”方法;如果我们只想用一个方法管理一个类的所有“缺失方法”,即不能被调度的方法,那么使用“methodMissing”方法更有效;当然,“invokeMethod”方法也可以实现“methodMissing”方法的功能。
0条评论