Some examples (inspired by the Java Enum Tutorial):
| Code Block |
|---|
enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
def tellItLikeItIs(Day day) {
switch (day) {
case Day.MONDAY:
println "Mondays are bad."
break
case Day.FRIDAY:
println "Fridays are better."
break
case Day.SATURDAY:
case Day.SUNDAY:
println "Weekends are best."
break
default:
println "Midweek days are so-so."
break
}
}
tellItLikeItIs(Day.MONDAY) // => Mondays are bad.
tellItLikeItIs(Day.WEDNESDAY) // => Midweek days are so-so.
tellItLikeItIs(Day.FRIDAY) // => Fridays are better.
tellItLikeItIs(Day.SATURDAY) // => Weekends are best.
|
Or with a bit of refactoring, you could write the switch like this:
| Code Block |
|---|
def today = Day.SATURDAY
switch (today) {
// Saturday or Sunday
case [ Day.SATURDAY, Day.SUNDAY ]:
println "Weekends are cool"
break
// a day between Monday and Friday
case Day.MONDAY..Day.FRIDAY:
println "Boring work day"
break
default:
println "Are you sure this is a valid day?"
}
|
Here is a coin example:
| Code Block |
|---|
enum Coin {
penny(1), nickel(5), dime(10), quarter(25)
Coin(int value) { this.value = value }
private final int value
public int value() { return value }
}
assert Coin.values().size() == 4
def pocketMoney = 2 * Coin.quarter.value() + 5 * Coin.dime.value()
assert pocketMoney == 100
// another way to do above
def coins = [ Coin.quarter ] * 2 + [ Coin.dime ] * 5
println coins // => [ quarter, quarter, dime, dime, dime, dime, dime ]
println coins.sum{ it.value() } // => 100
|
Here is a planet example:
| Code Block |
|---|
enum Planet {
MERCURY(3.303e+23, 2.4397e6),
VENUS(4.869e+24, 6.0518e6),
EARTH(5.976e+24, 6.37814e6),
MARS(6.421e+23, 3.3972e6),
JUPITER(1.9e+27, 7.1492e7),
SATURN(5.688e+26, 6.0268e7),
URANUS(8.686e+25, 2.5559e7),
NEPTUNE(1.024e+26, 2.4746e7)
private final double mass // in kilograms
private final double radius // in metres
Planet(double mass, double radius) {
this.mass = mass
this.radius = radius
}
private double mass() { return mass }
private double radius() { return radius }
// universal gravitational constant (m3 kg-1 s-2)
public static final double G = 6.67300E-11
double surfaceGravity() { return G * mass / (radius * radius) }
double surfaceWeight(double otherMass) { return otherMass * surfaceGravity() }
}
double earthWeight = 75.0 // kg
double mass = earthWeight/Planet.EARTH.surfaceGravity()
for (p in Planet.values()) {
printf("Your weight on %s is %f%n", p, p.surfaceWeight(mass))
}
// =>
// Your weight on MERCURY is 28.331821
// Your weight on VENUS is 67.874932
// Your weight on EARTH is 75.000000
// Your weight on MARS is 28.405289
// Your weight on JUPITER is 189.791814
// Your weight on SATURN is 79.951165
// Your weight on URANUS is 67.884540
// Your weight on NEPTUNE is 85.374605
|
Note: there are currently issues with using Groovy enums in conjunction with GroovyShell. Best bet would be to check Jira if you are having problems, e.g. http://jira.codehaus.org/browse/GROOVY-2135