2016-11-22 5 views
0

Ich habe eine Funktion mit zwei params:Wie Werte in Groovy passieren

private void function(LinkedList<String> a, LinkedList<String> b) 

Ich bin mit Groovy so muss ich diese Funktion in meinem Programm auch anrufen:

LinkedList<String> list1 = new LinkedList<String>(); 
LinkedList<String> list2 = new LinkedList<String>(); 
list1.add("A"); 
list1.add("B"); 
list1.add("C"); 
list2.add("A"); 
list2.add("B"); 
String command = "function(list1, list2)"; 
Binding binding = new Binding(); 
GroovyShell shell = new GroovyShell(binding); 
Object value = shell.evaluate(command); 

aber wenn ich nenne es und die Werte weiterzugeben, was ich sehe, ist:

function([A, B, C],[A, B]) 

natürlich ist dies gegen die Java-Syntax und der Compiler gibt erros. Gibt es eine Möglichkeit, die realen Werte zu übergeben?

+0

Erstens, warum 'LinkedList' als Parameter anstelle von nur' List' verwenden? Die Groovy-Standardimplementierung ist 'ArrayList'. Hast du es auch * mit Strings * versucht? d.h. "Funktion ([" A "," B "," C "], [" A "," B "])"? – chrylis

+2

warum nicht list1 und list2 zur Bindung hinzufügen? –

Antwort

1

Wenn Sie den Anruf tatsächlich (und schreiben dies in Groovy) Inline möchten, können Sie erklären gerade ein neues LinkedList mit einer Liste als Argument:

String command = "function(new LinkedList(['A','B', 'C']), new LinkedList(['A', 'B']))"; 

Ansonsten können Sie sie auf die Bindung hinzufügen wie @tim_yates sagte:

binding.setProperty("list1", list1); 
binding.setProperty("list2", list2);