假设我有一个包含200多个静态字段的常量类:
class AnimalConstants {
static final int AARDVARK = 1;
static final int ANTELOPE = 2;
static final int BEAR = 3;
...
...
static final int ZEBRA = 200;
}
答案 0 :(得分:7)
我不认为影响是表现或记忆。
我认为这与代码的可读性,保持常量接近它们的位置以及对问题的基本理解有关。
我更喜欢将常数声明为更接近他们使用的位置。我相信他们会更容易理解。
如果您声称为200+的真实常数真正相关,我会感到惊讶。如果它们是真的,它们就属于一个地方。如果没有,我会说他们应该被分成更小的部分并宣布更接近他们使用的地方。
我敢打赌,除了你想象的例子之外,还有更多的背景,如果知道的话会改变回应。
当然,枚举很棒。但请先看看我的其他评论。
答案 1 :(得分:2)
当然enum
实施比int
常量更加重要,但使用enum
:
foo(Animal animal)
优于foo(int animal)
)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已经成为一个类,那么就会出现这个问题,因为它需要更多的内存来维护它们的结构。我希望澄清你的疑问(抱歉英语很差,我有点生锈)