bar.with {... this。@ foo = ...}:groovy.lang.MissingMethodException:没有方法签名:MyClass.setFoo()适用于参数类型

时间:2018-04-23 11:14:04

标签: groovy

(使用Groovy 2.4.11) 以下伪修改代码:

enum EnumClass { a, b }

class Some {

   Foo foo

   Some() {
     EnumClass.with{ this.@foo = new Foo( a ) }
   }

   Some  setFoo( String _foo ) {  ... }
}

被调用为new Some(),并显示以下运行时异常:

  

groovy.lang.MissingMethodException:没有方法签名:MyClass.setFoo()适用于参数类型:(Foo)值:[Foo $ 12345] ...`

看起来好像编译器认为会有一些 this.foo = ...而不是this.@foo = ... 。 :-( (这不应该发生,因为我理解它似乎是一些错误)

1 个答案:

答案 0 :(得分:0)

解决方法:像这样写(在with - 闭包之外)工作......

enum EnumClass { a, b }

class Some {

   Foo foo

   Some() {
     //EnumClass.with{ this.@foo = new Foo( a ) }  // throws exception
     this.@foo = new Foo( EnumClass.a )            // works
   }

   Some  setFoo( String _foo ) {  ... }
}