enum icecream {
vanilla(100), strawberry(20);
int price;
icecream(int i) {
price = i;
}
}
我对编译时如何创建枚举对象感到有点困惑
我看到了一些他们像这样提到的例子
public enum Flavor
{
COFFEE, VANILLA, CHOCOLATE, STRAWBERRY, RUM_RAISIN, PEACH
}
这被翻译成(在编译期间)
public final class Flavor
extends java.lang.Enum
{
public static final Flavor COFFEE = new Flavor("COFFEE", 0);
public static final Flavor VANILLA = new Flavor("VANILLA", 1);
// ...
}
链接:http://www.kdgregory.com/index.php?page=java.enum
但是当我将值与名称一起传递给我时,如何创建对象,它们看起来就像是方法调用。 E.x.香草(100)这里的香草,价格是100,但它是如何创建的?我根本没有得到它。请帮忙:(
答案 0 :(得分:1)
java编译器将枚举作为常量读取,但最终,它们像任何其他对象一样实现(也就是说,它们不是特殊类型,如ints / floats / arrays,而是纯粹对象的语法包装器面向语言特征)。因此,枚举具有可以覆盖的构造函数,因此静态枚举不仅仅具有名称。这可能非常有用,例如,如果您希望枚举值具有多个字段。
例如,我可能有一个动物枚举,每个动物都有一个名字,以及一些腿:
public enum Animal{
Dog(4), Baboon(2);
public int legs;
private Animal(int legs) {
legs=legs;
}
}
但是,如果没有这样的覆盖,编译器会生成默认的枚举对象,这实际上就是您粘贴的内容。
答案 1 :(得分:1)
vanilla(100), strawberry(20)
只是一个java5 +表示法。它在编译期间被翻译成适当的对象创建代码:
public static final icecream vanilla = new icecream(100);
public static final icecream strawberry = new icecream(20);
BTW,java类型应该是CamelCased,因此,icecream
应该命名为IceCream
。