Alex Rivera | Logout

Why use Enums instead of Constants? Which is better in terms of software design and readability

Asked 2012-07-20T08:09:43.570
111

I have a scenario in which I have Player types ARCHER,WARRIOR, and sorcerer.
What should I use in Player class for a player type?
Constant final static String variable or an Enum? and Why?
Please help with reasons.

Edit
Report

2 Answers

167

Suppose you use constant strings (or int values - the same goes for them):

// Constants for player types
public static final String ARCHER = "Archer";
public static final String WARRIOR = "Warrior";

// Constants for genders
public static final String MALE = "Male";
public static final String FEMALE = "Female";

then you end up not really knowing the type of your data - leading to potentially incorrect code:

String playerType = Constants.MALE;

If you use enums, that would end up as:

// Compile-time error - incompatible types!
PlayerType playerType = Gender.MALE;

Likewise, enums give a restricted set of values:

String playerType = "Fred"; // Hang on, that's not one we know about...

vs

PlayerType playerType = "Fred"; // Nope, that doesn't work. Bang!

Additionally, enums in Java can have more information associated with them, and can also have behaviour. Much better all round.

answered 2012-07-20T08:13:29.480
21

Enums limit you to the required set of inputs whereas even if you use constant strings you still can use other String not part of your logic.

This helps you to not make a mistake, to enter something out of the domain, while entering data and also improves the program readability.

Additionally you can always use your enums as a String if you desire. Here is a reference.

answered 2012-07-20T08:13:38.717

Your Answer