// ===================================
// STUDY: Short Program about enum
// ===================================
class EnumTest {
public static enum DayOfTheWeek {
NONE(0, "None"),
SUNDAY(1, "Sunday"),
MONDAY(2, "Monday"),
TUESDAY(3, "Tuesday"),
WEDNESDAY(4, "Wednesday"),
THURSDAY(5, "Thursday"),
FRIDAY(6, "Friday"),
SATURDAY(7, "Saturday");
public final int id;
public String name;
// adding public causes an error, meaning enums can't be created outside
// public DayOfTheWeek(int value, String name) {
DayOfTheWeek(int id, String name) {
this.id = id;
this.name = name;
}
// enums can also have methods, since it's just a class internally
public void WhatDayAreYou() {
System.out.printf("I am %s\n", this.name);
}
public static DayOfTheWeek numberToDayOfTheWeek(int n) {
switch (n) {
case 1 : return SUNDAY;
case 2 : return MONDAY;
case 3 : return TUESDAY;
case 4 : return WEDNESDAY;
case 5 : return THURSDAY;
case 6 : return FRIDAY;
case 7 : return SATURDAY;
default : return NONE;
}
}
}
public static enum NumberEnum {
ZERO(0),
ONE(1),
TWO(2),
THREE(3);
public final int value;
NumberEnum(int value) {
this.value = value;
}
}
public static void main(String[] args) {
System.out.println(DayOfTheWeek.MONDAY.name);
DayOfTheWeek.MONDAY.WhatDayAreYou(); // I am Monday
DayOfTheWeek.numberToDayOfTheWeek(5).WhatDayAreYou(); // I am Thursday
// since enums are just classes, you can set member variables too,
DayOfTheWeek.MONDAY.name = "meme";
DayOfTheWeek.MONDAY.WhatDayAreYou(); // meme
// I was hoping java would let me compare enums with numbers
// if enum had only one member variable of that type,
// but alas
// switch(2) {
// case NumberEnum.TWO : System.out.println("two"); break;
// }
switch(NumberEnum.THREE) {
case TWO : System.out.println("two"); break;
case THREE : System.out.println("three"); break;
}
// So.... it might be reasonable to assume that
// java might be able to switch case on simple objects
/*
final Object obj1 = new Object();
final Object obj2 = new Object();
switch(obj1) {
case obj1 : System.out.println("obj1"); break;
case obj2 : System.out.println("obj2"); break;
}
*/
// nope, I was wrong.
// =====================================
// all enums inherits java.lang.Enum
// =====================================
Class<?> dayOfTheWeekClass = DayOfTheWeek.class;
Class<?> numberClass = NumberEnum.class;
if(Enum.class.isAssignableFrom(dayOfTheWeekClass)){
System.out.println("DayOfTheWeek inherits Enum");
}
if(Enum.class.isAssignableFrom(numberClass)){
System.out.println("NumberEnum inherits Enum");
}
// so, it has all the methods of Enum, for example...
System.out.println(DayOfTheWeek.MONDAY.name()); // MONDAY
}
}