我试图理解Java枚举的工作原理,我得出的结论是它非常类似于一个普通的Java类,其构造函数声明为私有。
我刚刚得出这个结论,它并没有经过太多的思考,但我想知道是否还有其他东西我没有注意到。
因此以下是一个简单的Java枚举和一个等价的Java类的实现。
public enum Direction {
ENUM_UP(0, -1),
ENUM_DOWN(0, 1),
ENUM_RIGHT(1, 0),
ENUM_LEFT(-1, 0);
private int x;
private int y;
private Direction(int x, int y){
this.x = x;
this.y = y;
}
public int getEnumX(){
return x;
}
public int getEnumY(){
return y;
}
}
上面的代码和下面的代码有何意义上的区别?
public class Direction{
public static final Direction UP = new Direction(0, -1) ;
public static final Direction DOWN = new Direction(0, 1) ;
public static final Direction LEFT = new Direction(-1, 0) ;
public static final Direction RIGHT = new Direction(1, 0) ;
private int x ;
private int y ;
private Direction(int x, int y){
this.x = x ;
this.y = y ;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
}
Direction d; switch(d)
),[2]Direction.toString()
的实现会有所不同,[3] 枚举方法允许你通过.values()
获取所有该“类”的实例,而类方法则不行。 - jedwardsvalues()
、valueOf()
和ordinal()
。 - Eng.Fouad