在Java中维护常量的最佳实践

在Java中维护常量的最佳实践,java,web-services,soap,jaxb,Java,Web Services,Soap,Jaxb,我对Java项目维护中的常量有一个老疑问。从我的角度来看,当我们尝试将常量放入这样一个抽象类中时: public final class MyConstants { public static final String CONSTANT1 = "const1"; public static final String CONSTANT2 = "const2"; public static final String CONSTANT3 = "const3"; public static final

我对Java项目维护中的常量有一个老疑问。从我的角度来看,当我们尝试将常量放入这样一个抽象类中时:

public final class MyConstants {
public static final String CONSTANT1 = "const1";
public static final String CONSTANT2 = "const2";
public static final String CONSTANT3 = "const3";
public static final String CONSTANT4 = "const4";
}
之后,在项目的类中使用这些常量:

public void myMethod(final Map params) {
final String myparam = (String) params.get(MyConstants.CONSTANT1);
//DO SOMETHING WITH PARAMS
}
它导致了锅炉板代码、常量的冗长使用,并且没有真正的进步。另一方面,如果我们把这些常量放在类中,人们会不喜欢它。他们说“我们在某处声明相同的常量怎么样?”问题是维护问题,如果我们在该类中更改这些常量,那么可以在多个部分看到更改,而不会出现任何大问题

这些常量主要用于映射webservices for java透视图,而无需基于WSDL生成类似POJO的JAXB,webservices操作直接映射到java中的键值映射。 我想知道你对这种方法的看法,以及我们是否有其他选择


谢谢。

如果我理解您的担忧,请不要将这些常量硬编码为值,除非可能是默认值,并将它们与和/或一起存储。您还可以阅读上的Java教程。大概

Properties props = new Properties();
FileInputStream in = new FileInputStream("my.proprties");
props.load(in);
String v = props.get("CONSTANT_ONE", "const1"); // <-- the "1" is a default.
Properties=newproperties();
FileInputStream in=newfileinputstream(“my.properties”);
道具载荷(in);

String v=props.get(“常量”、“常量1”);//不要使用原始类型。
Map
应该被参数化。一个常量(通常)不能改变而不是一个破坏性的改变。这与任何其他破坏API的更改没有什么不同。那么问题是什么应该是常量,什么应该是代码中的文字。@DavidConrad你是这样说的:如果是同一个问题,我们只是放一些泛型,维护密钥的问题仍然存在。@user2864740您是说,这可能与将这些常量保留在需要的类中的结果相同,如果更改了某些常量,只需搜索整个源代码并手动更改?@LambdaPool这些“常量”代表什么以及如何使用它们很重要;以及更改值的含义。XML标记是常量,但对此类标记使用常量/静态字段通常会导致可怕的混乱(另一方面,名称空间通常可以生成有用的常量)。此外,配置项(如Elliott所指出的)一开始就不是“常量”;即使它们可以被常量引用。常量是契约,就像0是0一样。不是所有的东西都应该是常量,但是从可配置属性中创建“常量”可以说是非常错误的。@user2864740我回答的是如果我们有其他选择;也许OP给出了一个常数键合适的例子。但是,在翻译或本地化时,上述内容非常合适,因为您可以在不更改代码的情况下修改翻译。可翻译资源不是常量。常量(“常量”)可能指的是资源。@user2864740主要用于映射Web服务for java透视图对我来说听起来像是一个可配置的
字符串(而不是常量)。我只是在扮演魔鬼代言人。