Groovy:命名参数构造函数

时间:2013-02-19 18:40:48

标签: groovy

我发现自己真的很酷:

class Foo {
    String name
}

def foo = new Foo(name:"Test")

但是,它仅在我的文件名与类名匹配时才有效。如果我有一个包含大量类的文件:

class AllClassesInOneFile {
    class Bar {}
    class Foo {
      String name
    }
}

def foo = new Foo(name:"Test")

现在,它不再起作用我得到一个java.lang.IllegalArgumentException:错误的参数数量

我想知道是否仍然可以使用脚本和嵌套类来调用命名参数参数样式。

此致

2 个答案:

答案 0 :(得分:6)

似乎Groovy需要显式引用外部类的实例:

class Baz {
    class Bar {}
    class Foo {
      String name
    }
}

def baz = new Baz()

def f = new Baz.Foo(baz, [name: "john doe"])

assert f.name == "john doe"

答案 1 :(得分:0)

没有外部类的实例就不能存在非静态嵌套对象。 在Java中相同。 只需将嵌套对象更改为静态对象即可。