LinkedBear
LinkedBear
Published on 2025-07-03 / 12 Visits
0
0

Java实际开发中, enum枚举用的多吗?

那可太多了。

枚举的作用绝不仅仅是代替传统的常量,更重要的意义是简化了有限可穷举的元素对象的定义。说白了,就是写代码省事儿了。

但是吧,枚举并不只是那么简单,下面我结合几个示例给你演示一下真实开发中的使用方式。

代替传统的常量

不用枚举的时候,我们一般都这么写常量:

 public class Constants {
     public static final int ENABLE = 1;
     public static final int DISABLE = 0;
 }

用了枚举之后就简单多了:

 public enum Status {
     ENABLE, DISABLE;
 }

带属性的枚举——字典

如果要给每个枚举映射不同的含义和对应的值,那就相当于数据字典了,用枚举同样简单得多。只要你愿意,完全可以把枚举类写的全面好用。

 public enum Status {
     ENABLE(1, "启用"),
     DISABLE(0, "禁用");
     
     private final int value;
     private final String name;
     
     // 构造方法、getter方法 ......
     
     public static Status getEnum(int value) {
         for (Status e : Status.values()) {
             if (Objects.equals(e.getValue(), value)) {
                 return e;
             }
         }
         return null;
     }
 }

单例模式的特殊实现方式

不用枚举时,我们实现单例模式有两种方式,分别是懒汉单例模式和饿汉单例模式。以饿汉单例模式为例,我们通常会这么写:

 public class Singleton {
     private static Singleton instance = new Singleton();
     
     private Singleton() {}
     
     public static Singleton getInstance() {
         return instance;
     }
 }

使用枚举就简单多了,而且可以最大程度保障只有一个对象。

 public enum Singleton {
     INSTANCE;
     
     public void doSomething() {
         System.out.println("doSomething");
     }
 }

使用枚举实现策略模式

策略模式是很经典的行为型模式,使用枚举可以很容易地制作有限可列举的不同策略。

举一个简单的例子吧,计算一个商品的折扣,可能这个商品参与多种活动,每种活动的折扣算法不一样,那么我们可以制作一个折扣规则类:

 public enum Discount {
     // 8折
     DISCOUNT8(money -> {
         return money * 0.8;
     }),
     // 满200-50
     FULL_DISCOUNT200_50(money -> {
         if (money > 200) {
             return money - 50;
         }
         return money;
     });
     
     private Function<Double, Double> function;
     Discount(Function<Double, Double> function) {
         this.function = function;
     }
     
     public Double apply(Double value) {
         return function.apply(value);
     }
 }

这个示例中定义了两种优惠算法,实际计算时只需要传入枚举名称,即可得到具体的计算规则,应用这个计算规则也就可以得到优惠后的价格。


Comment