Enumerated types
November 16, 2010 Leave a comment
o The new enum data type allows the developer to restrict valid values to a specified set.
o The compiler enforces valid values.
public enum CardSuit {HEARTS, DIAMONDS, CLUBS, SPADES};
public setSuit(CardSuit suit) //method that accepts enum
{ … }
setSuit(CardSuit.CLUBS); //can only be passed a valid suit
o All enum types extend java.lang.Enum .
o enum types are classes not integers. This guarantees type safety.
o enum types cannot be extended.
o enum values are public, static, and final.
o enum values can be compared with == or equals() .
o You can switch on enumerated types.
o When switching, there is no need to preface the enum values with the enum class name (in fact, the compiler does not allow it).
switch (card.getSuit()) {
case HEARTS:
System.out.println(“Hearts”);
break;
case DIAMONDS:
System.out.println(“Diamonds”);
break;
// and so on
}
o Since they are classes, you can add constructors and methods to enum types. (Grades.A.getAssessment() returns “Excellent!”)
public enum Grades {
A(1), B(2), C(2), D(3), F(3); //integer values are passed to constructor
private String assessment;
Grades(int value) {
switch (value) {
case 1: assessment = “Excellent!”; break;
case 2: assessment = “Not bad.”; break;
case 3: assessment = “Needs improvement!”; break;
}
}
public String getAssessment() {
return assessment;
}
}