我正在试图找出创建一个类的最佳方法,该类的唯一目的是成为全局静态变量的容器。这是一个伪代码,用于表示我的意思的简单例子......
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的实际值,所以我不能使用枚举类型。什么是实现这一目标的最佳方式?
答案 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),那么静态类/接口就可以了。