I have a scenario in which I have Player types ARCHER,WARRIOR, and sorcerer. What should I use in player class? A String variable for type or a Enum? Why enum and why Constant Strings. Please help with reasons.
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...
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.