枚举常量如何本质上是静态的,如何才能成为对象和访问方法并具有构造函数。
枚举常量如何同时是对象和静态对象
请参考以下代码:
enum Apple {
Jonathan(10), GoldenDel(9), RedDel, Winesap(15), Cortland(8);
private int price; // price of each apple
// Constructor
Apple(int p) {
System.out.println("Price: " + p);
price = p;
}
// default constructor, constructor overloading
Apple() {
price = -1;
System.out.println("Price: " + price);
}
int getPrice() { return price; }
}
class EnumDemo3 {
public static void main(String args[]) {
Apple ap;
// Display price of Winesap.
System.out.println("Winesap costs " + Apple.Winesap.getPrice() + " cents.\n");
// Display all apples and prices.
System.out.println("All apple prices:");
for(Apple a : Apple.values())
System.out.println(a + " costs " + a.getPrice() + " cents.");
}
}
答案 0 :(得分:1)
Java文档:
枚举类型的构造函数必须是程序包私有或私有访问。它会自动创建在枚举主体开头定义的常量。您不能自己调用枚举构造函数。
Jonathan(10), GoldenDel(9), RedDel, Winesap(15), Cortland(8);
其中的每一个都将在开头(当您执行Apple ap;
时)以方括号中指定的价格调用构造函数。
枚举也可以有方法。您不仅限于简单的getter和setter方法。您还可以创建基于枚举常量的字段值进行计算的方法。如果您的字段未声明为final,则您甚至可以修改字段的值(不正确的做法,考虑到枚举应为常量)。
枚举实例是“静态的”(即,行为类似于静态变量),但不是不可变的-这是您问题的答案。更改枚举的字段会对每个人都更改(静态)。
优良作法是在枚举中将字段定型并使其不可变。
private **final** int price;