【发布时间】:2015-01-13 19:45:50
【问题描述】:
我对 Java 项目维护中的常量有一个古老的疑问。从我的角度来看,当我们尝试将常量放在这样的 Abstract 类中时:
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
}
它导致了样板代码、常量的冗长使用并且没有真正的进步。另一方面,如果我们将这些常量放在类中,因为人们不喜欢它。他们说“我们在某处声明相同的常量怎么样?”问题是维护问题,如果我们更改该类中的这些常量,则可以在多个部分上看到更改而没有任何大问题。
这些常量主要用于映射 web 服务的 java 透视图,而不必像基于 WSDL 的 JAXB 那样生成 POJO,web 服务操作直接映射到 Java 中的键值映射。 我想知道您对这种方法有何看法,以及我们是否还有其他选择。
谢谢。
【问题讨论】:
-
不要使用原始类型。
Map应该被参数化。 -
一个常数(通常)不能在没有重大变化的情况下发生变化。 这与任何其他 API 重大更改没有什么不同。 那么问题只是 什么 应该是一个常量,什么应该只是代码中的文字..
-
@DavidConrad 你是不是在说这样的话: Map
以防同样的问题,我们只是放了一些泛型,维护密钥的问题仍然存在。 -
@user2864740 你是说将这些常量保留在需要的类中并且如果更改其中的一些只是搜索整个源代码并手动更改可能是相同的结果?
-
@LambdaPool 这些“常量”代表什么以及如何使用它们很重要;以及什么改变一个值的含义是什么。 XML 标签是常量,但使用常量/静态字段通常会导致可怕的混乱(另一方面,命名空间通常可以成为有用的常量)。此外,配置项(正如 Elliott 所指出的)一开始就不是“常量”;即使它们可以被常量引用。
标签: java web-services soap jaxb