在另一个内部调用方法时出现MissingMethodException

时间:2017-06-27 14:47:19

标签: groovy

我试图在另一个内部调用一个方法,我得到一个MissingMethodException。我的代码看起来像这样:

class Foo {
  static def bar {
    //do stuff
    return something
  }
  static def baz { myVar=false ->
    def something = bar()
    //do stuff w/something
  } 
}
Foo.baz()

这是我得到的错误:Caught: groovy.lang.MissingMethodException: No signature of method: Foo$__clinit__closure6.bar() is applicable for argument types: () values: []

如果我这样定义baz,我发现我可以修复此错误:

static def baz { myVar=false ->
  def something = this.bar()
  //do stuff w/something
}

但如果我这样做,我的IDE会告诉我这是Unnecessary qualified reference

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

您的代码段中的语法错误。您想要static def bar = {}static def bar() {}

如果您希望bar成为方法,则没有错误:

class Foo {
  static bar() { 'something' }

  static baz = { myVar=false ->
    def something = bar()
    return something + "!"
  } 
}

assert Foo.baz() == "something!"

如果您希望bar成为闭包(即bar = {}),那么要从bar调用baz,您需要先输入类名:

class Foo {
  static bar = { 'something' }

  static baz = { myVar=false ->
    def something = Foo.bar()
    return something + "!"
  } 
}

assert Foo.baz() == "something!"