Enumerated types

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;

}

}