假设你需要定义一个类,它所做的一切就是保存常量。
public static final String SOME_CONST = "SOME_VALUE";
执行此操作的首选方法是什么?
我应该使用哪一个?为什么?
对一些答案的澄清:
枚举-我不会使用枚举,我不会枚举任何东西,只是收集一些彼此不相关的常量。
接口-我不会将任何类设置为实现接口的类。我只想使用这个接口来调用常量,比如:ISomeInterface.SOME_CONST
。
发布于 2009-01-26 12:06:51
使用最后一个类。为简单起见,您可以使用静态导入在另一个类中重用您的值
public final class MyValues {
public static final String VALUE1 = "foo";
public static final String VALUE2 = "bar";
}
在另一个类中:
import static MyValues.*
//...
if(variable.equals(VALUE1)){
//...
}
发布于 2009-01-26 12:28:20
您的澄清声明:“我不会使用枚举,我不会枚举任何东西,只是收集一些彼此不相关的常量。”
如果这些常量根本不相关,为什么要把它们收集在一起呢?将每个常量放在与其关系最密切的类中。
发布于 2009-04-07 17:14:50
我的建议(按优先顺序递减):
1) do‘t do it.在实际类中最相关的地方创建常量。拥有“一袋常量”的类/接口并不是真正遵循面向对象的最佳实践。
我和其他所有人都会时不时地忽略#1。如果你打算这么做,那么:
2)使用私有构造函数 final类这至少可以防止任何人通过扩展/实现它来方便地访问常量来滥用您的“常量包”。(我知道你说过你不会这么做--但这并不意味着在你之后有人不会这么做)
3) 接口这将工作,但不是我的偏好给出了#2中提到的可能的滥用。
一般来说,仅仅因为这些是常量并不意味着您不应该对它们应用普通的面向对象原则。如果只有一个类关心一个常量,那么这个常量应该是私有的,并且在那个类中。如果测试只关心一个常量-它应该在测试类中,而不是在生产代码中。如果一个常量被定义在多个地方(不只是偶然地相同)-重构以消除重复。以此类推--像对待方法一样对待它们。
https://stackoverflow.com/questions/479565
复制相似问题