【问题标题】:Use Enum for keeping Constants [duplicate]使用枚举来保持常量[重复]
【发布时间】:2014-10-18 13:16:39
【问题描述】:

我知道枚举在java中的用法。

是否推荐使用枚举来存储程序常量(而不是下面描述的类)?

public class Constants{
    public static final String DB_CF_NAME = "agent";
    public static final String DB_CF_ID = "agent_id";
    public static final String DB_CF_TEXT = "agent_text";
    public static final String DB_CF_LATITUDE = "latitude";
}

【问题讨论】:

  • 是的。 Enums(与 class 不同)旨在以这种方式使用。
  • 我实际上会说这取决于您的常量。想象一个项目,你有不同类型的常量,Stringdoubleint 等,那么枚举并不适合,而是一个包含很多 static final 变量的类。
  • 恕我直言,在定义常量方面,枚举相对于类的唯一真正优势是枚举自动成为静态单例并且自动成为最终的。您或您的用户不能犯实例化或覆盖常量容器的错误。
  • 别忘了,ENUM 是枚举数据类型。这些是具有值集的数据类型。从技术上讲,它适合常量,但从概念上讲,它们不是……最好在上下文中使用 private 常量。

标签: java enums constants


【解决方案1】:

是的,你是对的 - 建议使用枚举来存储程序常量。

正如您在下面的示例中所见,这种方法允许您:

  • 为您的字符串文字添加/覆盖有用的方法:

    public enum Days {
        MONDAY("Monday"),
        TUESDAY("Tuesday"),
        SUNDAY ("Sunday");
    
    private final String name;
    
    private Day(String s) {
            name = s;
    }
    
  • 使用Enums的内置方法:

    public boolean equalsName(String otherName){
        return (otherName == null)? false : name.equals(otherName);
    }
    
  • 使用EnumMapEnumSet

    private EnumSet<Option> badDays = EnumSet.of(Days.MONDAY, Days.TUESDAY);
    

Here is a good 对此进行讨论。

【讨论】:

  • 作为评论会好很多...
  • @SanjayT.Sharma 我提供了一个基本的答案,然后在一段时间后添加了更多信息。
  • 现在是Link only answer !!!
  • @KisHanSarsecHaGajjar ...现在不是!!!
  • 您的常量是星期几并且彼此相关,但我的常量仅用于获取数据库行。我不需要使用迭代和...等枚举
【解决方案2】:

推荐使用枚举。可能的原因是这样的

  • 提供迭代常量的默认函数
  • 可以编写静态函数来根据键获取值

可以自己制作方法,让你的班级自我维持。但最好的方法是使用Enum

【讨论】:

  • 我的常量仅用于获取数据库行(查询)。我不需要使用迭代和静态函数等枚举。我使用这种方式仍然合理吗?
  • 是的,如果你对模型类使用JPA,使用@Enumerated(EnumType.STRING)来控制列周围的常量。
【解决方案3】:

这适用于 Java 1.5 及更高版本:

public enum Constants {
    DB_CF_NAME("agent"),
    DB_CF_ID("agent_id"),
    DB_CF_TEXT("agent_text"),
    DB_CF_LATITUDE("latitude");

    private String name;

    private Constants(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }
}

您需要使用问题中提到的public static final 变量的构造的唯一时间是您为 Java 1.4 或更低版本进行编程时。不过,我有点希望你永远不需要这样做。

【讨论】:

    【解决方案4】:

    是的。确切地。您可以使用 Enum 被设计为用作预定义常量。

    Enum docs 也被提及。

    枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量。

    【讨论】:

    • 没有枚举来保持对象的状态或类型?
    • 不完全是。只是有用的方法少了,不代表他们就胖了。 :) 去找他们吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2012-05-05
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多