枚举vs接口/类常量

时间:2019-07-01 14:55:36

标签: java enums constants

因此,我需要维护一些String常量文字,并想知道要使用哪个常量,为什么? 下面是3种实现方式

使用课程

Class Constants{
    public static final String Constants1;
    public static final String Constants1;
}

使用界面

interfaceConstants{
    String Constants1;
    String Constants1;
}

使用枚举

enum Constants{
 CONSTANT1("constant1");
 CONSTANT2("constant2");

//----constructor and getter implementation
}

除了可以对所有值进行迭代之外,使用枚举还有一个优点 因为每次我需要用枚举来枚举 enum.CONSTANT.toString()或enum.CONSTANT.getValue()

这种pf链接对我来说似乎对Constants.Constant1从类/接口,特别是用于从地图等检索值时,

修改: 我尝试了一段代码,意识到我实际上不需要使用方法链,我可以简单地使用enum.CONSTANT1覆盖toString方法

1 个答案:

答案 0 :(得分:0)

枚举是必经之路。首先,请考虑以下示例:

    enum Size {
       SMALL, MEDIUM, LARGE
    }

    class Drink {
       private Size size;

       public Drink(Size size) {
          // no need to verify legal size
          this.size = size;
       }
    }

如果使用常量,则必须检查大小以确保其在适当的范围内。指定一个枚举,您只有三个选择。无需检查。

在上面的示例中,您还可以为每个常量使用构造函数以添加特定大小(例如12、16、20 oz)。

此外,还有一个EnumSet类,可以轻松地代替常量来传递和操作enums。这是一个示例:

      EnumSet<Size> s = EnumSet.of(Size.SMALL, Size.LARGE);
      System.out.println(s); // prints [SMALL, LARGE]
      s = EnumSet.complementOf(s);
      System.out.println(s); // prints [MEDIUM]