我试图理解Java枚举是如何工作的,我得出的结论是它与普通的Java类非常相似,它的构造函数被声明为private.
我刚刚得出这个结论,并不是基于太多的想法,但我想知道我是否想念任何东西.
下面是一个简单的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;
}
}
Run Code Online (Sandbox Code Playgroud)
上面和下面的代码有什么区别?
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) ; …Run Code Online (Sandbox Code Playgroud) enum有valueOf(string)获取枚举常量的方法,并且java.lang.Enum类名中valueOf(enumClassName, string)
我所发现的同一类型的方法都给出相同的输出.那么还有什么其他差异.如果没有差异那么为什么JSL添加Enum.valueOf()?
enum Season {
WINTER,SUMMER
}
class Test {
public static void main(String[] args) {
String season = "WINTER";
//switch (Season.valueOf(colObject)) // following line achieves same thing
switch (Enum.valueOf(Season.class, season)) // any other difference between both approach
{
case WINTER: {
System.out.println("Got it in switch case= VENDOR");
break;
}
default:
System.out.println("Fell thru.");
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)