2013-02-19 18 views
6

fand ich wirklich cool, dass man tun kann:Groovy: Benannte Parameter Konstrukteurs

class Foo { 
    String name 
} 

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

Aber es funktioniert nur, wenn meine Dateinamen den Klassennamen übereinstimmt. Wenn ich eine Datei mit einem Bündel von Klassen haben mag:

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

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

Jetzt ist es nicht mehr funktioniert bekomme ich eine java.lang.IllegalArgumentException: falsche Anzahl von Argumenten

Ich frage mich, ob es noch möglich ist, Aufrufen des benannten Parameterargumentstils mit Skripts und verschachtelten Klassen.

Grüße

Antwort

6

Scheint, wie Groovy expliziten Verweis auf eine Instanz der äußeren Klasse braucht:

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" 
+0

Das ist richtig, und es nervt irgendwie :(Ich bin sicher, die groovy Entwickler haben eine Tonne. Gründe dafür, aber ich fand heraus, dass nicht nur benannte Parameter nicht funktionieren.Jeder Konstruktor funktioniert nicht.Danke für die Hilfe –

+9

@FuriousBob Wenn Sie Ihre verschachtelten Klassen statisch machen, sollten Sie in der Lage sein, sie zu erstellen, ohne eine Instanz zu erstellen der äußeren Klasse. –