在java中创建一个枚举/最终类

时间:2011-07-14 17:23:57

标签: java enums global-variables final static-variables

我正在试图找出创建一个类的最佳方法,该类的唯一目的是成为全局静态变量的容器。这是一个伪代码,用于表示我的意思的简单例子......

public class Symbols {
   public static final String ALPHA = "alpha";
   public static final String BETA = "beta";

   /* ...and so on for a bunch of these */
}

我不需要构造函数或方法。我只需要通过调用Symbols.ALPHA;

就可以从任何地方访问这些“符号”

需要 String的实际值,所以我不能使用枚举类型。什么是实现这一目标的最佳方式?

3 个答案:

答案 0 :(得分:10)

嗯,目前还不清楚除了你已经给出的代码之外你还需要什么 - 除了让这个类最终并给它一个私有的构造函数。

但是,为了避免意外使用不合适的值,我怀疑你更好地将其作为枚举,如下所示:

public enum Symbol {
   ALPHA("alpha"),
   BETA("beta");

   private final String value;

   private Symbol(String value) {
     this.value = value;
   }

   public String getValue() {
     return value;
   }
}

那样:

  • 您不会意外地使用Symbol.ALPHA,而您实际上只是想要一个字符串
  • 您不会意外地使用您真正期待符号的字符串
  • 您仍然可以轻松获取与符号相关联的字符串值
  • 如果需要,您可以打开不同的符号值

答案 1 :(得分:4)

您可以使用界面执行此操作。不需要构造,值是公共的,静态的和最终的,并且显然可以是字符串。这样的界面看起来与你的类似:

public interface Symbols {
  public static final String ALPHA = "alpha";
  public static final String BETA = "beta";
  /* and so on */
}

您可以直接从代码中的任何位置访问这些字段(公开),如Symbols.ALPHA等。

或者,即使您想要字符串,也可以使用枚举 - ALPHA.toString()将返回“ALPHA”(如果您想要稍微不同的字符串,则可以覆盖toString()

答案 2 :(得分:0)

这些配置参数还是简单的“常量”,无论如何都不会改变?对于前者,我宁愿创建一个配置类,并使用不同的值为每个环境实例化它。然后简单地使用依赖注入将这些配置注入到不同的类中。如果你的要求是后者,或者你没有使用DI(Spring / Guice),那么静态类/接口就可以了。