首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中如何定义一类常量?

在Java中如何定义一类常量?
EN

Stack Overflow用户
提问于 2009-01-26 12:00:10
回答 11查看 127.5K关注 0票数 102

假设你需要定义一个类,它所做的一切就是保存常量。

代码语言:javascript
复制
public static final String SOME_CONST = "SOME_VALUE";

执行此操作的首选方法是什么?

  1. Interface
  2. Abstract类
  3. 最终类

我应该使用哪一个?为什么?

对一些答案的澄清:

枚举-我不会使用枚举,我不会枚举任何东西,只是收集一些彼此不相关的常量。

接口-我不会将任何类设置为实现接口的类。我只想使用这个接口来调用常量,比如:ISomeInterface.SOME_CONST

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-01-26 12:06:51

使用最后一个类。为简单起见,您可以使用静态导入在另一个类中重用您的值

代码语言:javascript
复制
public final class MyValues {
  public static final String VALUE1 = "foo";
  public static final String VALUE2 = "bar";
}

在另一个类中:

代码语言:javascript
复制
import static MyValues.*
//...

if(variable.equals(VALUE1)){
//...
}
票数 109
EN

Stack Overflow用户

发布于 2009-01-26 12:28:20

您的澄清声明:“我不会使用枚举,我不会枚举任何东西,只是收集一些彼此不相关的常量。”

如果这些常量根本不相关,为什么要把它们收集在一起呢?将每个常量放在与其关系最密切的类中。

票数 39
EN

Stack Overflow用户

发布于 2009-04-07 17:14:50

我的建议(按优先顺序递减):

1) do‘t do it.在实际类中最相关的地方创建常量。拥有“一袋常量”的类/接口并不是真正遵循面向对象的最佳实践。

我和其他所有人都会时不时地忽略#1。如果你打算这么做,那么:

2)使用私有构造函数 final类这至少可以防止任何人通过扩展/实现它来方便地访问常量来滥用您的“常量包”。(我知道你说过你不会这么做--但这并不意味着在你之后有人不会这么做)

3) 接口这将工作,但不是我的偏好给出了#2中提到的可能的滥用。

一般来说,仅仅因为这些是常量并不意味着您不应该对它们应用普通的面向对象原则。如果只有一个类关心一个常量,那么这个常量应该是私有的,并且在那个类中。如果测试只关心一个常量-它应该在测试类中,而不是在生产代码中。如果一个常量被定义在多个地方(不只是偶然地相同)-重构以消除重复。以此类推--像对待方法一样对待它们。

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/479565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档