Próbowałem zrozumieć, w jaki sposób enum Java działa naprawdę i doszedłem do wniosku, że jest bardzo podobny do normalnej klasy Java, której konstruktor został zadeklarowany jako prywatny.Jakie są różnice między wyliczeniem Java a klasą z prywatnym konstruktorem?
Właśnie doszedłem do tego wniosku i nie opiera się to na zbytnim myśleniu, ale chciałbym się dowiedzieć, czy coś mi brakuje.
Poniżej znajduje się implementacja prostego wyliczenia Java i równoważnej klasy 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;
}
}
Jaka jest różnica w rozumieniu kodu powyżej i poniżej?
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;
}
}
Dobre pytanie, są one pod wieloma względami podobne :) Z dużą ilością różnic jestem pewien, że dobre odpowiedzi tutaj zarysują. –
Co najmniej trzy różnice, które mogę wymyślić: [1] nie będziesz w stanie zmienić drugiej implementacji (tj. 'Kierunek d, przełącznik (d)'), [2] 'Direction.toString()' implementacje będą różne, [3] Metoda enum pozwala uzyskać wszystkie wystąpienia "klasy" za pomocą '.values ()', podczas gdy metoda klasy nie. – jedwards
Utracisz wartości 'values ()', 'valueOf()' oraz 'ordinal()'. –