Каковы различия между перечислением Java и классом с закрытым конструктором? [Дубликат]
На этот вопрос уже есть ответ здесь:
В чем преимущество перечисления Java по сравнению с классом с открытыми статическими полями final? 14 ответовЯ пытался понять, как на самом деле работает перечисление 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;
}
}