스파르타 spring 2기 TIL day11

fart man·2025년 12월 5일
// ===================================
// 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
    }
}

0개의 댓글