在java中创建枚举/final类



我试图找出最好的方法来创建一个类,其唯一目的是作为全局静态变量的容器。下面是一些伪代码,作为一个简单的例子来说明我的意思…

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;

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

嗯,除了你已经给出的代码之外,你还需要什么还不清楚-除了可能使类为final并给它一个私有构造函数。

但是,为了避免意外使用不合适的值,我认为最好将其设置为enum,如下所示:
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,你真的只是期待一个字符串
  • 你不能不小心在你真正期望符号的地方使用字符串
  • 您仍然可以轻松地获得与符号
  • 相关联的字符串值
  • 如果你需要,可以打开不同的符号值

您可以使用接口来做到这一点。不需要构造,值是公共的、静态的和final的,显然可以是字符串。这样的接口看起来类似于您的类:

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

您可以直接从代码中的任何地方访问字段(给定它是公共的),如Symbols.ALPHA等。

或者,您可以使用enum,即使您想要字符串—ALPHA.toString()将返回"ALPHA"(如果您想要一个稍微不同的字符串,您可以覆盖toString())

这些是配置参数还是无论如何都不会改变的"常量"?对于前者,我宁愿创建一个配置类,并为每个环境使用不同的值实例化它。然后只需使用依赖注入将这些配置注入到不同的类中。如果您的需求是后者,或者您不使用DI (Spring/Guice),那么静态类/接口是很好的选择。

相关内容

  • 没有找到相关文章

最新更新