public enum AppConst{
WIDTH (1280),
HEIGHT (800);
private final int value;
AppConst(int value) {
this.value = value;
}
private int get() { return value; }
}
VS
public class AppConst{
public static final int WIDTH = 1280;
public static final int HEIGHT = 800;
}
我读到enums
最好用于存储常量值。它是一种很好的方式来存储它们,因为我展示或我误解了什么?
修改即可。 我认为将所有这些值放在一个地方可能会更好,因为如果需要,我们可以轻松修改它们。我错了吗?
EDIT2 AppConst旨在成为一个地方,我将存储所有值,这不应该是“魔术数字”。比如窗口坐标等我计划可能有一些字段为DAYS_IN_WEEK = 7,MAX_smth = ...,...,....
答案 0 :(得分:3)
使用Enums
代替static final
变量的主要好处是在处理安全需求的方法参数限制时。这是一个例子:
public void myMethod(int width, int height){}
VS
public void myMethod(AppConst width, AppConst height){}
第二个限制了可接受的int
值,在您的情况下:800和1280。
因此,根据您的需要,枚举可以比静态常量更安全。
此外,由于您没有将行为引入您的枚举,您可以写下:
public enum AppConst{
WIDTH (1280),
HEIGHT (800);
}
答案 1 :(得分:2)
枚举用于表示枚举类型;也就是说,一种简单地由有限的已知值组成的数据类型。如果想要添加多个“位”信息,那么将数据添加到枚举是很有趣的:
public enum Gender 男性(“男性”,“男性”,“先生”), 女性(“女性”,“女性”,“女士”);
private String genderName;
private String genderPerson;
private String genderTitle;
....
}
通常,有一个变量代表一个对象,并切换其值。
我认为在你的情况下,你只想拥有两个众所周知的整数值,所以我会选择静态的final int。
请注意,正如@PremGenEditor所指出的,您可能遇到WIDTH和HEIGHT更改的情况,因此它们可能最终只是某个对象的另一个属性;他们自然会成为一个整体。
答案 2 :(得分:2)
通常,枚举用于包含同一类实体的值集。虽然在你的情况下这可能仍然只适用于WIDTH和HEIGHT,但如果你需要为背景颜色添加一个新的应用程序常量,它将不再适用。
AppConst类的名称让我想到了一些通用的东西。我在这里看到两个案例:
答案 3 :(得分:1)
对于真正的值 -constant就像你的一样,这有点矫枉过正。使用枚举 -types的枚举,例如状态或其他内容。
当天回来,你可能会做这样的事情:
public static final int STATUS_OKAY = 0;
public static final int STATUS_ERROR = 1;
public static final int STATUS_WARNING = 3;
public static final int SOMETHINGELSE = 0;
// ...
if (getStatus() == STATUS_OKAY){
// Do something...
}
if (getStatus() == 4) // This is NEVER true! Still it's allowed
但这不是类型保存。您也可以将它与一个甚至不存在的值进行比较(假设4
)。使用枚举,您没有它,并且您的代码更具可读性:
public enum Status{
OKAY, WARNING, ERROR
}
if (getStatus() == Status.OKAY){
// Do Something
}
if (getStatus() == Status.DOESNTEXIST) // Compile-time error.
打算变得更清晰,您可以获得更好的代码,并且枚举 -constants具有编译时安全性。
在您的示例中,WIDTH
和HEIGHT
只是常量值,您可以将它们存储为常量字段。
答案 4 :(得分:0)
Java中的枚举是类型安全的,并且有自己的名称空间。这意味着你的枚举将在下面的例子中有一个类型,例如“AppConst”,你不能分配除枚举常量中指定的任何值。
public enum AppConst { WIDTH (1280), HEIGHT (800);}
AppConst height = AppConst.HEIGHT;
height = 1; /*compilation error*/
Java中的枚举是类或接口的引用类型,您可以在java Enum中定义构造函数,方法和变量,这使得它在C和C ++语言中比Enum更强大。
java中的枚举可以用作switch语句的参数,“case:”可以用作int或char原语类型。 java enum的这个特性使它们对切换操作非常有用。
由于Java中Enum中定义的常量是最终的,因此您可以使用“==”相等运算符安全地比较它们,如下所示:
AppConst height = AppConst.HEIGHT;
if (height == AppConst.HEIGHT){
System.out.println("Hello World!");
}
但不建议使用==运算符比较对象,请始终使用equals()方法或compareTo()方法来比较对象。
Java中的枚举可以实现接口并覆盖任何方法,如普通类。值得注意的是,java中的Enum隐式实现了Serializable和Comparable接口。
您可以在Java中定义Enum中的抽象方法,也可以为java中不同的枚举实例提供不同的实现。
Enum有自己的名字空间。在Java中使用Enum添加新常量非常简单,您可以在不破坏现有代码的情况下添加新常量。