Maps in Groovy (Schlüsseldefinition)
Maps in Groovy (Schlüsseldefinition)
Die Definition einer Map in Groovy ist eine einfache Angelegenheit: def map = ["key": "value"]
.
Doch wie definiert man eine Map in der die Keys nicht als String-Literale, sondern als Variablennamen angegeben
werden sollen.
Da Groovy intuitiv ist würde man Folgendes ausprobieren:
public final static String FREE = "Free"
public final static String BASIC = "Basic"
public final static String PLUS = "Plus"
public final static String PREMIUM = "Premium"
public final static String MAX = "Max"
public final static LICENSE_DATA = [
FREE: [ user: 10, storage: 100, course: 3, fee: 0 ],
BASIC: [ user: 200, storage: 2 *1024, course: 20, fee: 2500 ],
PLUS: [ user: 500, storage: 5 *1024, course: 50, fee: 5000 ],
PREMIUM: [ user: 2000, storage: 20*1024, course: 200, fee: 100000 ],
MAX: [ user: 5000, storage: 50*1024, course: 500, fee: 200000 ]
]
Dieses Beispiel definiert 5 Konstanten die den Namen einer Lizenz speichern und wir definieren eine Map, die zu jeder Lizenz bestimmte Informationen enthält. Um den Namen der Lizenz in der Definition der Map nicht doppelt zu schreiben geben wir für die Keys die Variablennamen der Konstanten an. Dies funktioniert in Groovy aber nicht.
Bei der Definition einer Map wird die Key-Definition nicht als Ausdruck ausgewertet, sondern trotz fehlender
Anführungszeichen als String. Für unser Beispiel bedeutet es, dass in der Map LICENSE_DATA.FREE
aber nicht
LICENSE_DATA.Free
hinterlegt ist.
Mit einem kleinen Kniff kann man sich aber behelfen.
public final static String FREE = "Free"
public final static String BASIC = "Basic"
public final static String PLUS = "Plus"
public final static String PREMIUM = "Premium"
public final static String MAX = "Max"
public final static LICENSE_DATA = [
(FREE): [ user: 10, storage: 100, course: 3, fee: 0 ],
(BASIC): [ user: 200, storage: 2 *1024, course: 20, fee: 2500 ],
(PLUS): [ user: 500, storage: 5 *1024, course: 50, fee: 5000 ],
(PREMIUM): [ user: 2000, storage: 20*1024, course: 200, fee: 100000 ],
(MAX): [ user: 5000, storage: 50*1024, course: 500, fee: 200000 ]
]
Mit den runden Klammern (FREE)
entsteht ein Ausdruck der auch ausgewertet wird. Man kann also mittels
LICENSE_DATA.Free
auf den Eintrag zugreifen.
Design von Validierungsnachrichten
Jeder kennt Formulare auf Webseiten und hat sich über schlechte Usability geärgert. Dieser Beitrag zeigt verschiedene Möglichkeiten wie Formulare auf falsche Nutzereingaben reagieren können.
Rechnen mit Calendar (Pitfall)
Die Calendar-Klasse in Java war schon immer schwierig in der Anwendung. Dieser Artikel erklärt ein Pitfall, den Sie als Programmierer unbedingt kennen sollten, um peinliche Fehler zu vermeiden.