java中枚举的使用场景及示例

在Java中,枚举(Enum)类型用于表示固定数量的常量值。它们通常用于表示一组相关的值,例如一周的天数、月份、颜色等。枚举类型提供了一种类型安全的方式来限制变量的值。

以下是一个简单的枚举类型的示例,表示一周的七天:

public enum Day {
    
    
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

你可以像这样使用枚举:

Day day = Day.MONDAY;

switch (day) {
    
    
    case MONDAY:
        System.out.println("Mondays are hard.");
        break;
    case FRIDAY:
        System.out.println("Fridays are better.");
        break;
    // You can have case statements for the other days as well
    default:
        System.out.println("Midweek days are so-so.");
        break;
}

枚举类型还可以有构造函数、方法和字段。例如,假设你有一个表示月份的枚举,每个月份都有一个特定的天数:

public enum Month {
    
    
    JANUARY(31),
    FEBRUARY(28),
    MARCH(31),
    APRIL(30),
    MAY(31),
    JUNE(30),
    JULY(31),
    AUGUST(31),
    SEPTEMBER(30),
    OCTOBER(31),
    NOVEMBER(30),
    DECEMBER(31);

    private final int days;

    Month(int days) {
    
    
        this.days = days;
    }

    public int getDays() {
    
    
        return days;
    }
}

然后,你可以像这样使用它:

Month month = Month.FEBRUARY;
System.out.println("February has " + month.getDays() + " days.");

这将输出 “February has 28 days.”。

在Java中,枚举类型可以用于更复杂的场景,例如实现设计模式(如单例模式、策略模式)或作为状态机的一部分。

以下是一个使用枚举实现的单例模式的例子:

public enum Singleton {
    
    
    INSTANCE;

    public void execute (String arg) {
    
    
        // perform operation here
    }
}

然后,你可以像这样使用它:

Singleton singleton = Singleton.INSTANCE;
singleton.execute("Do something");

在这个例子中,枚举类型确保了单例的全局访问点,并且由于枚举类型的特性,这个单例是线程安全的。

另一个复杂的使用场景是实现策略模式。假设你有一个应用程序,它可以以多种不同的方式进行排序,你可以使用枚举来实现这些不同的排序策略:

public enum SortStrategy {
    
    
    ASCENDING {
    
    
        public void sort(int[] array) {
    
    
            Arrays.sort(array);
        }
    },
    DESCENDING {
    
    
        public void sort(int[] array) {
    
    
            Arrays.sort(array);
            int length = array.length;
            for (int i = 0; i < length / 2; i++) {
    
    
                int temp = array[i];
                array[i] = array[length - 1 - i];
                array[length - 1 - i] = temp;
            }
        }
    };

    public abstract void sort(int[] array);
}

然后,你可以像这样使用它:

int[] array = {
    
    3, 1, 4, 1, 5, 9};
SortStrategy strategy = SortStrategy.DESCENDING;
strategy.sort(array);
System.out.println(Arrays.toString(array));

这将按降序排序数组并打印结果。

猜你喜欢

转载自blog.csdn.net/orton777/article/details/131328470