是否可以创建具有大量静态字段的Constants类?

时间:2013-01-10 10:10:56

标签: java oop class constants

假设我有一个包含200多个静态字段的常量类:

class AnimalConstants {
  static final int AARDVARK = 1;
  static final int ANTELOPE = 2;
  static final int BEAR = 3;
  ...
  ...
  static final int ZEBRA = 200;
}
  • 任何人都可以解释使用此类是否对性能和内存产生任何负面影响
  • 如果将类更改为接口(例如SwingConstants)并由某些类实现,会不会更好或更糟?
  • 如果我将常量实现为Enum类会不会更好或更糟?

6 个答案:

答案 0 :(得分:7)

我不认为影响是表现或记忆。

我认为这与代码的可读性,保持常量接近它们的位置以及对问题的基本理解有关。

我更喜欢将常数声明为更接近他们使用的位置。我相信他们会更容易理解。

如果您声称为200+的真实常数真正相关,我会感到惊讶。如果它们是真的,它们就属于一个地方。如果没有,我会说他们应该被分成更小的部分并宣布更接近他们使用的地方。

我敢打赌,除了你想象的例子之外,还有更多的背景,如果知道的话会改变回应。

当然,枚举很棒。但请先看看我的其他评论。

答案 1 :(得分:2)

当然enum实施比int常量更加重要,但使用enum

  1. 您不需要硬编码动物的实际值(在您的情况下),以后可以更改
  2. 你不需要硬编码动物的总数,你可以简单地遍历所有动物
  3. 具有此枚举参数的方法将被正确理解(foo(Animal animal)优于foo(int animal)
  4. 您可以稍后为enum值添加其他功能,例如内部价值isMammal

答案 2 :(得分:2)

  

如果将类更改为接口(例如SwingConstants)并由某些类实现,会不会更好或更糟?

- >那将是Constant Interface Pattern。如果我们使用接口作为常量并且它是由所有类实现的,但是如果您正在开发API,那么就像暴露您的实现细节一样。上面的维基链接很好地解释了这一点。

在两种方法(接口或类)中,我建议使用final类,创建常量,并在必要时对常量执行static import

  

如果我将常量实现为Enum类会不会更好或更糟?

- >使用Enums,这将是最好的方法。

答案 3 :(得分:2)

将已编译的任何值更改为另一个类可能需要完整构建。

附录:请参阅Is it possible to disable javac's inlining of static final variables?进行更彻底的检查。

答案 4 :(得分:1)

是的,可以创建大量常量。讨论负面影响很难,因为我们不知道任何替代方案,因为我们没有您的功能要求。

但请放心,编译器可以很好地处理人类编写的代码。拥有一堆字段可能会没问题。

我觉得常量非常好,因为它可以在JDK7中用于切换案例,你可以与==进行比较,变量名可以提供信息。

恩可以更好吗?是的,它可以。探索枚举的功能,看看是否有什么吸引力

答案 5 :(得分:0)

对于你的种类(动物类型),我建议你使用枚举器而不是类。使用它的变量数不应该是性能问题因为你只使用int原语。如果任何var已经成为一个类,那么就会出现这个问题,因为它需要更多的内存来维护它们的结构。我希望澄清你的疑问(抱歉英语很差,我有点生锈)