Groovy Methodenauswahl Gotcha

Groovy hat mich schon wieder erwischt. Da wollte ich doch nur eine Methode aufrufen die wahlweise einen String oder ein Array von Strings erwartet, jedoch war das Ergebnis eher überraschend.

Man nehme:

public class CallString {
private String[] books = new String[64]
public void setBook(String book) {
System.out.println(„set book string“)
this.books[0] = book
}
public void setBook(String[] inBooks) {
System.out.println(„set book array“)
for (int i = 0; i < inBooks.length && books.length; ++i) { this.books[i] = inBooks[i] } } public String toString() { return "["+ books.findAll {it != null}.join(", ") +"]" } } [/sourcecode] Und rufe folgendes auf: [sourcecode language='java'] CallString o = new CallString(); o.setBook("The Book") println o $ groovy call.groovy set book string [, The Book] [/sourcecode] Okay das ist noch wie erwartet. Allerdings ist der Mensch ja faul und verwendet gerne die abgekürzte schreibweise: [sourcecode language='java'] CallString o = new CallString(); o.book = "The Book" println o $ groovy call.groovy set book array [, T, h, e, , B, o, o, k] [/sourcecode] Das ist nun wirklich nicht das was ich erwartet habe und hat mich auch ein wenig Zeit gekostet. Das selbe passiert übrigens auch wenn CallString in Java geschrieben ist.

Wie dem auch sei scheint es wie auch bereits beim vorherigen Groovy Map Gotcha mit der Magie hinter dem Methodenzugriff per „.“ zu stecken und man sollte direkt die gewünschten Methoden aufrufen wenn man auf der sicheren Seite sein will – oder muss wissen was man tut.

Kommentare sind geschlossen.

%d Bloggern gefällt das: