vault backup: 2025-12-10 11:37:35
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
---
|
||||
title: Groovy - Using Enums
|
||||
tags:
|
||||
- IT/Development/Groovy
|
||||
---
|
||||
|
||||
Some examples (inspired by the Java Enum Tutorial):
|
||||
|
||||
```groovy
|
||||
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:
|
||||
|
||||
```groovy
|
||||
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:
|
||||
|
||||
```groovy
|
||||
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 abovedef 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:
|
||||
|
||||
```groovy
|
||||
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 // kgdouble 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
|
||||
|
||||
|
||||
Evernote hilft dir, nichts zu vergessen und alles mühelos zu ordnen und zu organisieren. Evernote herunterladen.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user