各位老师好:
今天看了下枚举类enum,对其不是非常的明白,如果它是一个类那么为什么不能NEW呢?这个枚举怎么用呢,小弟实在是搞不明白,麻烦高人指点迷津。
------解决方案--------------------
[/codepublic enum Fruit {
APPLE,PEAR,ORANGE
}
举个例子,Java通过enum关键字构建枚举类型,但其内在实现帮我们做了一系列的工作。
首先,Fruit就是一个Class,并继承自java.lang.Enum类,所以Enum类中实现的ordinal()和name()方法在枚举类型中可以调用。
然后,不能new Fruit是因为Java帮你构建枚举类型的时候屏蔽了Fruit的构造方法,即相当于声明了一个private的构造方法
而你的Fruit类中的APPLE、PEAR、ORANGE其实就相当于这个Fruit类的三个实例,他们是三个不可变对象,存在唯一实例。
其实Java帮我们做的一系列工作以后差不多就是这样:
[code=java]public class Fruit extends Enum{
// APPLE,PEAR,ORANGE
public static final Fruit APPLE = new Fruit("APPLE", 0);
public static final Fruit PEAR = new Fruit("PEAR", 1);
public static final Fruit ORANGE = new Fruit("ORANGE", 2);
}
这里的new Fruit()方法调用了Enum类的构造方法
public class Fruit extends Enum{
// APPLE,PEAR,ORANGE
public static final Fruit APPLE = new Fruit("APPLE", 0);
public static final Fruit PEAR = new Fruit("PEAR", 1);
public static final Fruit ORANGE = new Fruit("ORANGE", 2);
private Fruit() {
}
}
只不过由于泛型的限制Java不允许我们显式的声明一个类继承自Enum,它自动帮我们做了这一系列工作。
所以你不能new一个Fruit类,只能向里面加实例